[rabbitmq-discuss] py-amqplib status messages
matthias at lshift.net
Tue Nov 25 21:07:05 GMT 2008
Dmitriy Samovskiy wrote:
> This means that I either have to do buffering inside producer in order
> to be able to resend them all, or I have to wrap each basic.publish in tx.
> In latter case, it's a total of 5 methods (tx.select, tx.select-ok,
> basic.publish, tx.commit, tx.commit-ok).
You only need the tx.select/select-ok before the first message. And
there is nothing forcing you to commit after *every* message. Instead
keep a bounded buffer of n messages and commit every n. That's far more
efficient than requiring an ack for every single message.
The downside is that even with this optimised usage tx is quite
expensive and does a lot more than what you want here.
There is an alternative to using tx: issue *any* synchronous command.
The response constitutes a guarantee that all messages published prior
to the request will have been processed by the channel process on the
server. They may still get lost on their way too queues, but that only
happens in case of a server fault. Furthermore, if the basic.publish has
the mandatory flag set then in the latter case a basic.return is
guaranteed to be sent prior to the synchronous command response.
AFAIK that behaviour is not mandated by the spec though.
More information about the rabbitmq-discuss