[openstack-dev] [oslo] AMQP 1.0 based messaging driver available for review

Gordon Sim gsim at redhat.com
Mon Feb 24 10:15:04 UTC 2014


I have been working with Ken Giusti on an AMQP 1.0 messaging driver for 
olso.messaging. The code for this is now available for review at
https://review.openstack.org/#/c/75815/

As previously mentioned on this list, this uses the Apache Qpid Proton 
'protocol engine' library. This is not a standalone client library, it 
includes no IO or threading, and simply provides the encoding and 
protocol rules. This was chosen to give full flexibility in other 
aspects of the client, allowing it to be tailored to best suit the 
olso.messaging usecase. It does mean however that the driver has a 
little more code than might be expected had a full client library been used.

The code uses a new directory (package) layout for this driver, based on 
suggestions from Flavio Percoco (thanks Flavio!). There is a protocols 
directory under _drivers, with amqp being used for this one. This name 
was preferred to proton to make it clear that the intention is to speak 
clean, neutral AMQP 1.0 and to avoid tying the driver code to specific 
intermediaries.

With that new amqp package, there is a subdirectory called engine which 
contains some generic wrappers around the lower level proton APIs. It 
may be that at some point this layer, or something similar, is available 
either directly in proton or in some supplementary library at which 
point we would have the option of dropping some of the code from within 
oslo.messaging itself.

The driver.py module implements the defined driver API, mostly by making 
requests on the controller.py module where most of the protocol mapping 
logic lies. The io is driven by a separate thread and the event loop for 
this is defined in eventloop.py. The threads calling on the driver 
communicate with the io thread (which uses non-blocking io), using Queues.

So far the testing has largely been through ad hoc clients and servers 
for the oslo.messaging API. I have also used it with nova under 
devstack. My knowledge of openstack is still very low. I followed the 
very helpful advice offered by Russell Bryant here: 
https://ask.openstack.org/en/question/28/openstack-api-mocker-or-simulator/

However I am eager to learn more and any suggestions for things to carry 
out with real openstack service will be greatly appreciated. I also plan 
to work on some functional tests at the olso.messaging API level that 
could be used to test any of the drivers. This would allow the lack of 
covergae with the current qpid driver to be addressed as welll as 
providing more confidence with this new driver (and would I think be 
useful for any other driver implementer who lacks sufficient knowledge 
of the other openstack services, or simply as a way of catching more 
issues earlier).

The current driver available for review requires an intermediary of some 
form, whether a 'broker' that supports AMQP 1.0 or something slightly 
different such as the Qpid Dispatch Router previously mentioned on this 
list.

I have tested successfully with qpidd and qpid dispatch router. At 
present RabbitMQ does not support 'dynamic nodes' necessary for 
temporary reply queues in 1.0, but I have a workaround planned for that.

This email is already growing rather long, so I'll leave it at that for 
now but would be delighted to answer any questions or address nay 
feedback whether here or through the review request above, or the 
associated blueprint: 
https://blueprints.launchpad.net/oslo.messaging/+spec/amqp10-driver-implementation

I will communicate regarding enhancements and additions to the code.

--Gordon



More information about the OpenStack-dev mailing list