Rabbitmq - множественная привязка (ключи маршрутизации) к одной очереди - PullRequest
4 голосов
/ 30 марта 2011

Мне нужна ссылка, пожалуйста, на очередь с несколькими ключами маршрутизации.
Видите ли, я создал очередь и связал ее один раз с

  channel.queuebind()

, а другой раз с еще раз

 channel.queuebind()

пока я не получу эти две привязки в одной и той же очереди.
но после публикации - только первое ограниченное сообщение было успешно передано.
(Я даже заменил ордера и до сих пор - только первое.публикация в порядке)

Что я не сделал - это определил channel.basicConsumer с новым подписчиком.
я должен это сделать?Я хочу, чтобы старый subciver получал больше сообщений.что я сделал не так?

Вот список моих очередей:
Вы можете видеть, что 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);

1 Ответ

7 голосов
/ 29 января 2016

Вы можете следовать следующим образом:

channel.queueBind (queueName, exchangeName, "k1");// k1 - первый ключ маршрутизации

channel.queueBind (queueName, exchangeName, "k2");// k2 - второй ключ маршрутизации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...