在我的RabbitMQ中,我有一个名为room-topic-exchange
的主题交换器,绑定就像这样
当我使用交换机向特定队列发送消息时,一切正常。我发送如下:
template.convertAndSend(ROOM_TOPIC_EXCHANGE, roomId, message);
但是当我尝试发送到所有队列时,没有任何反应。我正在尝试这个
template.convertAndSend(ROOM_TOPIC_EXCHANGE, "room*", message);
我宣布交换器和绑定如下
TopicExchange allRooms = new TopicExchange(ROOM_TOPIC_EXCHANGE, false, true);
admin.declareExchange(allRooms);
admin.declareBinding(BindingBuilder.bind(q).to(allRooms).with(roomId));
我无法看清我做错了什么。我阅读了文档,并尝试使用路由键room#
,但没有发生任何事情。
答案 0 :(得分:1)
主题交换并不是那样的;如果使用通配符绑定,则不要在路由键中使用通配符。
与room.*
绑定的队列会将邮件发送到room.123
或room.124
。
您可以通过向每个房间添加第二个绑定来实现您想要的效果,例如room.splat
;然后发送到room.splat
将转到两个队列。
或者,您可以添加第二个fanout
兑换。将两个队列绑定到两个交换机(没有扇出所需的路由密钥),并将广播发送到扇出交换机并将消息发送到主题。