TopicExchanger不发送到所有队列

时间:2015-11-25 20:34:16

标签: spring-boot rabbitmq spring-amqp

在我的RabbitMQ中,我有一个名为room-topic-exchange的主题交换器,绑定就像这样 enter image description here

当我使用交换机向特定队列发送消息时,一切正常。我发送如下:

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#,但没有发生任何事情。

1 个答案:

答案 0 :(得分:1)

主题交换并不是那样的;如果使用通配符绑定,则不要在路由键中使用通配符。

room.*绑定的队列会将邮件发送到room.123room.124

您可以通过向每个房间添加第二个绑定来实现您想要的效果,例如room.splat;然后发送到room.splat将转到两个队列。

或者,您可以添加第二个fanout兑换。将两个队列绑定到两个交换机(没有扇出所需的路由密钥),并将广播发送到扇出交换机并将消息发送到主题。