Rabbitmq - 到单个队列的多个绑定(路由键)

发布于 2024-10-27 11:16:16 字数 1684 浏览 2 评论 0原文

我需要一个关于多个路由键绑定队列的参考。
你看,我创建了一个队列,并将其绑定一次

  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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

影子的影子 2024-11-03 11:16:16

您可以按照以下方式操作:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文