我需要一个引用请到多个路由键绑定队列 你看,我创建了一个队列并用
绑定了一次 channel.queuebind()
又一次又一次
channel.queuebind()
直到我在同一个队列中得到这两个绑定 但在发布时 - 只有第一个有界信息被成功转移 (我甚至更换了订单,但仍然只是第一个。所以我的发布是好的)
我没做的 - 是用新订户定义channel.basicConsumer 我应该这样做吗?我希望旧的subsciver能够获得更多消息。我做错了什么?
这是我的队列列表 你可以看到amq.gen-4ae4QUbSNevC / RgM + 8C9CA ==绑定到两个键。
但消息仅发送到第一个键
Listing queues ...
amq.gen-4ae4QUbSNevC/RgM+8C9CA== 0
amq.gen-sgZK0bSc0W3QEXda8m1vIQ== 0
PositionsQueue 1
...done.
rabbitmqctl.bat list_bindings
Listing bindings ...
exchange PositionsQueue queue PositionsQueue []
exchange amq.gen-4ae4QUbSNevC/RgM+8C9CA== queue amq.gen-4ae4QUbSNevC/RgM+8C9CA==
exchange amq.gen-sgZK0bSc0W3QEXda8m1vIQ== queue amq.gen- sgZK0bSc0W3QEXda8m1vIQ==
Positions_Exchange exchange amq.gen-4ae4QUbSNevC/RgM+8C9CA== queue Account:Account1
Positions_Exchange exchange amq.gen-4ae4QUbSNevC/RgM+8C9CA== queue Portfolio:Portfolio1
...done.
10倍
编辑:
制作人
channel.basicPublish(exchangeName, routingKey, MessageProperties.MINIMAL_BASIC, messageBodyBytes);
消费者
channel.exchangeDeclare(exchangeName, "direct", durable);
QueueName = channel.queueDeclare(queueName, durable, exclusive, autoDelete, arguments).getQueue();
channel.queueBind(queueName, exchangeName, routingKey);
boolean noAck = false;
queueingConsumer = new QueueingConsumer(channel);
channel.basicConsume(queueName, noAck, queueingConsumer);
答案 0 :(得分:7)
您可以这样:
channel.queueBind(queueName,exchangeName," k1"); // k1是第一个路由密钥
channel.queueBind(queueName,exchangeName," k2"); // k2是第二个路由密钥