[openstack-dev] [oslo.messaging] [mistral] Acknowledge feature of RabbitMQ in oslo.messaging

Zane Bitter zbitter at redhat.com
Tue Jul 7 21:54:55 UTC 2015

On 07/07/15 06:13, Renat Akhmerov wrote:
> Just to clarify: what we’re looking for is how to implement “Work queue”
> pattern described at [1] with oslo messaging. As Nikolay said, it
> requires that a message to be acknowledged after it has been processed.

Yeah, so as you've discovered, oslo.messaging has no support for 
reliable asynchronous messaging. (Synchronous messaging in the form of 
'call' can be somewhat reliable - in the sense that as long as the 
caller is still alive it can retry until it gets a reply.)

In theory you could modify oslo.messaging to ack the message _after_ 
processing, but in practice I don't know how much that would help. IIRC 
Rabbit's acknowledgement mechanism still exhibits some flakiness when 
viewed from end-to-end, but even if that's wrong the very best you could 
say about it is that it's completely dependent on what settings are used 
in the RabbitMQ deployment - which are completely opaque to you. Since 
no project really 'owns' the semantics of Rabbit I don't believe there's 
any docs saying how it must be deployed, and if there is such a project 
then it's oslo.messaging and that acks messages before acting them so 
it's unlikely that it's docs call out the importance of reliable 
end-to-end delivery.

The way I see it, there are two other options that would be preferable:

1) Implement your own acks. Save the msg content to the DB, send a 
RabbitMQ message, delete the message from the DB once it's processed, 
have a periodic task to resend any messages that have timed out. Or
2) Zaqar


> [1] http://www.rabbitmq.com/tutorials/tutorial-two-python.html
> Renat Akhmerov
> @ Mirantis Inc.
>> On 07 Jul 2015, at 15:58, Nikolay Makhotkin <nmakhotkin at mirantis.com
>> <mailto:nmakhotkin at mirantis.com>> wrote:
>> Hi,
>> I am using RabbitMQ as the backend and searched oslo.messaging for
>> message acknowledgement feature but I found only [1] what is wrong
>> using of acknowledgement since it acknowledges incoming message before
>> it has been processed (while it should be done only after processing
>> the message, otherwise we can lost given message if, say, the server
>> suddenly goes down).
>> So, my questions: does oslo.messaging indeed not support correct
>> acknowledgement feature? Or it is impossible to do for oslo.messaging
>> paradighm? Or is it somehow connected with that oslo.messaging has to
>> support a lot of transport types?
>> Can't it be implemented somehow in oslo.messaging?
>> [1]
>> https://github.com/openstack/oslo.messaging/blob/master/oslo_messaging/rpc/dispatcher.py#L135
>> Best Regards,
>> Nikolay
>> @Mirantis Inc.
>> __________________________________________________________________________
>> OpenStack Development Mailing List (not for usage questions)
>> Unsubscribe: OpenStack-dev-request at lists.openstack.org
>> <mailto:OpenStack-dev-request at lists.openstack.org>?subject:unsubscribe
>> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev
> __________________________________________________________________________
> OpenStack Development Mailing List (not for usage questions)
> Unsubscribe: OpenStack-dev-request at lists.openstack.org?subject:unsubscribe
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

More information about the OpenStack-dev mailing list