[rabbitmq-discuss] Fwd: question on the faq
gsim at redhat.com
Mon Jan 5 17:37:01 GMT 2009
Tim Coote wrote:
> I've now read a bit of the specs :-)
> amqp defines tx classes (which are not transactional in the sense of
> XOpen's XA specification) and dtx, which are. I don't understand, at
> the moment, what tx really means in the context of a message passing
> system, but I suspect that it's something to do with some sort of
> 'transactional' model with a message server (or whatever I call the
> agent that my application interacts with that is its interface to the
> messaging system): I can send messages to the message server with
> transactional semantics, but there's no downstream semantics. I'm not
> very clear on how this is a useful piece of functionality as I cannot
> see what guarantees I get for it.
As an example, imagine a task queue to which jobs are submitted. A
'worker' takes a message from this queue, performs some processing and
then publishes a response to a specified reply queue.
If this happens under an atomic transaction, then either the response is
enqueued *and* the task it corresponds to is dequeued or the task
remains on the queue to be reprocessed and the response is discarded.
That is my view of what the tx class is for and one example of why it
can be useful.
All dtx adds to the picture is allowing that transaction to also include
operations on other resources. E.g. in the example above it might be
that the job involves some updates to the database and these can be made
atomic w.r.t the enqueue of the response and the dequeue of the job itself.
More information about the rabbitmq-discuss