GenericMessagingSystem
Generic Messaging System Proposal
Drafter: PaulGuth
Drafters Email: <<MailTo(paul AT cloudscaling DOT com)>>
Status: To be completed by POC
Proposal
Nova currently supports only RabbitMQ as a messaging system for its internal RPC. We want to implement a generic interface that would allow people to use whatever messaging systems fit best in their environments. This should simplify management for organizations with established messaging infrastructures and also ease adoption for organizations that don't currently use RabbitMQ.
We are addressing this by separating the RPC interface out from the queuing system, essentially creating an API that nova will use to access whatever messaging system is underneath. nova/rpc.py will become generic messaging functionality, simply:
create_connection(new=True) create_consumer(conn, topic, proxy, fanout=False) create_consumer_set(conn, consumers) call(context, topic, msg) cast(context, topic, msg) fanout_cast(context, topic, msg) multicall(context, topic, msg)
The specifics of the underlying messaging implementation become a separate driver. As part of this blueprint the driver for the existing AMQP system will be included so no changes will be visible to existing installations or documentation. However, after these changes anyone can plugin a new driver to implement whatever messaging system they prefer.