I'm working with RabbitMQ and I'm confused using fanout exchange and convertSendAndReceive
(or sendAndReceive
) method of RabbitTemplate
class.
For example, I have 2 consumers for durable queues QUEUE-01 and QUEUE-02 that are binded to durable fanout exchange FANOUT-01. And 1 publisher to FANOUT-01. I understand what happens when message is being published with convertAndSend
(or send
) method, message is going to be copied to each queue and will be processed by each consumer. But I'm not sure what will happen if I will call sendAndReceive
method? Which consumer will I get a reply from? Is there any specific behaviour? I could not find any documentation on this.
sendAndReceive()
is not appropriate for fanout
messaging; it is indeterminate as to which reply will win (the first one, generally). If you want to handle multiple replies and aggregate them you will need to use discrete send
and receive
calls (or listener container for the replies) and do the aggregation yourself.
Consider using Spring Integration for such situations. It has built-in components for aggregating messages.