Rabbitmq - 到单个队列的多个绑定(路由键)
我需要一个关于多个路由键绑定队列的参考。
你看,我创建了一个队列,并将其绑定一次
channel.queuebind()
,然后再次绑定,
channel.queuebind()
直到我将这两个绑定放在同一个队列上。
但在发布后 - 仅第一个有界消息已成功传输。
(我什至更换了订单,但仍然 - 只有第一个。所以我的发布没问题)
我没有做 - 是使用新订阅者定义channel.basicConsumer。
我应该这样做吗?我希望老订阅者收到更多消息。我做错了什么?
这是我的队列列表
您可以看到 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.
10x
编辑:
生产者
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);
I need a reference please to a multiple routing keys binded queue.
You see, I created a queue and binded it once with
channel.queuebind()
and another time with yet again
channel.queuebind()
until i got this two bindings on the same queue.
but upon publishing - only the first bounded message was transfered successfully.
(I even replaced the orders and still - only the first. so my publishing is ok)
What i didnt do - is define the channel.basicConsumer with a new subscriber.
should I do it ? I want the old subsciver to get more messages. what did I do wrong?
Here is a list of my queues is
you can see that amq.gen-4ae4QUbSNevC/RgM+8C9CA== is binded to two keys.
but the message goes only to the first key
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.
10x a lot
Edit:
producer
channel.basicPublish(exchangeName, routingKey, MessageProperties.MINIMAL_BASIC, messageBodyBytes);
consumer
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);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以按照以下方式操作:
channel.queueBind(queueName,exchangeName,“k1”); //k1是第一个路由键
channel.queueBind(queueName,exchangeName,“k2”); //k2是第二个路由键
You can follow this way:
channel.queueBind(queueName, exchangeName, "k1"); //k1 is first routing key
channel.queueBind(queueName, exchangeName, "k2"); //k2 is second routing key