I have got a RabbitMQ message structure, where a message A is supposed to generate a number of messages, let's call them B and C. A message A is received by a worker process, which then processes it and generates messages B and C.
The supposed workflow process is as follows:
- Receive a message
Awithack=False - Start a transaction
- Run some code
- Generate message
B - Generate message
C - Send
ackfor messageA - Complete the transaction
In any case a worker process dies during the processing of message A, or while is has not yet completed the transaction - I would like RabbitMQ to treat the message A as undelivered and re-queue it.
RabbitMQ runs in highly available configuration if that is relevant.
Why question is trying to clear the RabbitMQ documentation here, stating:
Furthermore, RabbitMQ provides no atomicity guarantees even in case of transactions involving just a single queue, e.g. a fault during tx.commit can result in a sub-set of the transaction's publishes appearing in the queue after a broker restart.
- Is there any way I could achieve the behaviour I would like in the context of RabbitMQ or any other queueing software on the market?
- Is there any way I could make that work for multiple queues with RabbitMQ?