[rabbitmq-discuss] [ANNOUNCEMENT] Introducing Lyra: A High Availability RabbitMQ Client
Matthias Radestock
matthias at rabbitmq.com
Thu Oct 31 07:27:28 GMT 2013
Jonathan,
On 31/10/13 02:49, Jonathan Halterman wrote:
> We could cache delivery tags for channels internally, but I'm
> hesitant to go down that road.
It wouldn't help anyway, since, as a mentioned, the same delivery_tag
can appear on both the old and new incarnation of the channel.
delivery_tags are just counters, starting from 1 on a fresh channel.
> While Lyra certainly makes it easier for this scenario to pop up,
> rare as it might be,
It's not rare at all. You are guaranteed to end up in that scenario
anytime a recovery takes place while a consumer is processing a message.
> the same problem could occur without Lyra when swapping a consumer
> over to a new channel after the consumer is unexpectedly cancelled
> and/or the channel is unexpectedly closed.
Absolutely. Don't do that :)
> That said, no good solutions come to mind just yet. Do you have any
> ideas?
The scenario is impossible to address without changing the API. Bunny
does that with the VersionedDeliveryTag. The Messaging Patterns
libraries we wrote some years ago do it by making ack() take the entire
Message data structure, and have that include the channel version. See
http://hg.rabbitmq.com/rabbitmq-java-messagepatterns/file/21df7ca85b96/src/main/java/com/rabbitmq/messagepatterns/unicast/Receiver.java#l19
Regards,
Matthias.
More information about the rabbitmq-discuss
mailing list