There appears to be a problem with this patch. It introduces a change in messaging behavior that I think is a bug. I've found a problem while testing my port of this fix to oslo.messaging (see link in previous comment for review). The problem that I'm seeing is that RPC messages sent to a topic that has more than one server is no longer having the RPC request be serviced by only one server. Instead, this patch causes the RPC request to be multicast to _all_ servers - basically it now acts like a fanout. Here's exactly what I'm seeing. I've built a simple RPC server and client test tool (see https://github.com/kgiusti/oslo-messaging-clients), which can select between the two topology versions via command line switch. If I run two servers using topology version 1 on topic "my-topic", like this: (py27)[kgiusti@t530 work (master)]$ ./my-server.py --topology=1 server01 & Running server, name=server01 exchange=my-exchange topic=my-topic namespace=my-namespace Using QPID topology version 1 (py27)[kgiusti@t530 work (master)]$ ./my-server.py --topology=1 server02 & [ Running server, name=server02 exchange=my-exchange topic=my-topic namespace=my-namespace Using QPID topology version 1 And if I then invoke a single RPC call via a client, I see only one of the servers get the RPC request. Each time I invoke the RPC client, the request is "round-robined" across the servers: (py27)[kgiusti@t530 work (master)]$ ./my-client.py --topology=1 my-topic methodB arg1 arg2 server01::TestEndpoint02::methodB( ctxt={'application': u'my-client', 'cast': None, 'time': u'Sat Nov 16 08:50:39 2013'} arg={u'arg1': u'arg2'} ) called!!! (py27)[kgiusti@t530 work (master)]$ ./my-client.py --topology=1 my-topic methodB arg1 arg2 server02::TestEndpoint02::methodB( ctxt={'application': u'my-client', 'cast': None, 'time': u'Sat Nov 16 08:50:45 2013'} arg={u'arg1': u'arg2'} ) called!!! (py27)[kgiusti@t530 work (master)]$ ./my-client.py --topology=1 my-topic methodB arg1 arg2 server01::TestEndpoint02::methodB( ctxt={'application': u'my-client', 'cast': None, 'time': u'Sat Nov 16 08:50:50 2013'} arg={u'arg1': u'arg2'} ) called!!! However, if I repeat the above using topology=1, both servers get a copy of the RPC request and service it: (py27)[kgiusti@t530 work (master)]$ ./my-server.py --topology=2 server02 & Running server, name=server02 exchange=my-exchange topic=my-topic namespace=my-namespace Using QPID topology version 2 (py27)[kgiusti@t530 work (master)]$ ./my-server.py --topology=2 server01 & Running server, name=server01 exchange=my-exchange topic=my-topic namespace=my-namespace Using QPID topology version 2 Now invoke the client once: (py27)[kgiusti@t530 work (master)]$ ./my-client.py --topology=2 my-topic methodB arg1 arg2 And both servers respond: (py27)[kgiusti@t530 work (master)]$ server02::TestEndpoint02::methodB( ctxt={'application': u'my-client', 'cast': None, 'time': u'Sat Nov 16 08:52:22 2013'} arg={u'arg1': u'arg2'} ) called!!! server01::TestEndpoint02::methodB( ctxt={'application': u'my-client', 'cast': None, 'time': u'Sat Nov 16 08:52:22 2013'} arg={u'arg1': u'arg2'} ) called!!! Clearly a change in behavior, and, per my noob understanding of the RPC implementation, a bug.