Luiz E.
Luiz E.

Reputation: 7229

TopicExchanger not sending to all queues

In my RabbitMQ, I have an topic exchanger called room-topic-exchange and the bindings are like this enter image description here

When I send a message to an specific queue, using the exchanger, everything works fine. I'm sending as follow:

template.convertAndSend(ROOM_TOPIC_EXCHANGE, roomId, message);

but when I try to send to ALL queues, nothing happens. I'm trying as this

template.convertAndSend(ROOM_TOPIC_EXCHANGE, "room*", message);

I declared the exchanger and the bind as follow

TopicExchange allRooms = new TopicExchange(ROOM_TOPIC_EXCHANGE, false, true);
admin.declareExchange(allRooms);
admin.declareBinding(BindingBuilder.bind(q).to(allRooms).with(roomId));

I can't see what I'm doing wrong. I read the documentantion, and tried with routing key room# too and nothing happened.

Upvotes: 0

Views: 191

Answers (1)

Gary Russell
Gary Russell

Reputation: 174484

The topic exchange doesn't work that way; you bind with wildcards, you don't use a wildcard in the routing key.

A queue bound with room.* will get messages sent to room.123 or room.124.

You can achieve what you want by adding a second binding to each room, say room.splat; then sending to room.splat will go to both queues.

Or, you can add a second fanout exchange. Bind both queues to both exchanges (no routing key needed for the fanout) and send broadcasts to the fanout exchange and directed messages to the topic.

Upvotes: 1

Related Questions