Rabbitmq - 多个绑定(路由密钥)到单个队列

Bic*_*ick 5 rabbitmq

我需要一个引用请到多个路由键绑定队列.
你看,我创建了一个队列并用它绑定了一次

  channel.queuebind()
Run Code Online (Sandbox Code Playgroud)

还有一次又一次

 channel.queuebind()
Run Code Online (Sandbox Code Playgroud)

直到我在同一个队列上得到这两个绑定.
但在发布时 - 只有第一个有界消息被成功转移.
(我甚至更换了订单 - 仍然只是第一个.所以我的发布没问题)

我没做的 - 是用新订户定义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.
Run Code Online (Sandbox Code Playgroud)

10倍很多

编辑:

制片人

    channel.basicPublish(exchangeName, routingKey, MessageProperties.MINIMAL_BASIC, messageBodyBytes);
Run Code Online (Sandbox Code Playgroud)

消费者

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);
Run Code Online (Sandbox Code Playgroud)

小智 9

你可以这样跟着:

channel.queueBind(queueName,exchangeName,"k1"); // k1是第一个路由密钥

channel.queueBind(queueName,exchangeName,"k2"); // k2是第二个路由密钥