2015-11-09 7 views
1

У меня есть два брокера, настроенных [1] с плагином федерации. Оба указывают друг на друга как вверх по течению.RabbitMQ: Двунаправленные федеративные брокеры, как вы делаете все очереди поп-сообщения?

Мой тест:

  • опубликовать сообщение о посредничать в
  • потребляют брокер B

Результат:

  • потребляя на брокера B работает
  • < good> очередь на брокера B po п.с. сообщение
  • < не хорошо> очередь на брокер А еще имеют сообщение
    • < причины, почему это не хорошо> Проблемы, которую я вижу: если я всегда публикую на одного брокера, а затем всегда потребляю другой -> тогда очередь на издательском брокере будет расти до тех пор, пока она не станет полной и не начнет отбрасывать сообщения.

В результате я хотел бы это:

  • обе очереди на брокера А и B поп свои сообщения, когда потребитель потребляет брокер B

Как настроить RabbitMQ вывести сообщение из всех очередей, когда потребитель потребляет сообщение на брокере B? Прямо сейчас я пытаюсь сделать это с помощью плагина федерации RabbitMQ.


[1] Два брокеров указывают друг на друга, как и выше по потоку настроить им same way as described in the "simple example" given by the documentation кроме того, что существуют два брокера каждый из которых указывает друг на друга как вверх по течению. code for the publisher looks like this и code for the consumer looks like this.

+0

Я полагаю, вы используете федерацию очереди? и вы хотите потреблять сообщения от одного брокера, а также другой брокер должен быть выровнен, не так ли? – Gabriele

+0

@Gabriele re - «[вы] используете федерацию очереди?»: Я использую [«простой пример»] (https://www.rabbitmq.com/federation.html) из раздела «Начало работы». Я думаю, что этот «простой пример» использует Federated Exchanges. (Также мой RabbitMQ - это версия 3.1.5, у которой нет Federated Queues ([Federated Queues доступны для версий 3.2 и далее] (https://www.rabbitmq.com/federated-queues.html)). –

+0

@Gabriele вы говорите, что федеративные очереди могут быть решением проблемы? (Я спрашиваю, потому что я заметил, что вы гораздо более опытные (автор поваренной книги RabbitMQ, которую я купил уже)). Через десять минут [чтение о федеративных очередях] (https://blog.pivotal.io/pivotal/news-2/new-release-rabbitmq-3-2-0-with-federated-queues), похоже, что они будут делать то, что мне нужно/нужно (т. е. потребитель на другом брокере будет потребляться из федеративной очереди, и это приведет к тому, что сообщение будет потреблено в очереди вверх по потоку). Является ли мое объяснение правильным для вас? –

ответ

1

Я создал эту окружающую среду:

Сервер A, сервер B.

Создано двунаправленной федеративной таким образом:

Федерация Upstream: Server_B = amqp://servera

Федерации Upstream: Server_A = amqp://serverb

Затем создал ту же политику на обоих серверах:

Pattern : ^fed\. 
Apply to: all 
federation-upstream-set:all 

Создана одна очередь для сервера A, вызываемая: fed.test1, затем создана потребитель к серверу B, как:

ConnectionFactory factory = new ConnectionFactory(); 
factory.setHost("localhost"); 
factory.setPort(5673); 
Connection connection = factory.newConnection(); 
Channel channel = connection.createChannel(); 


Consumer consumer = new DefaultConsumer(channel) { 
@Override 
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) 
         throws IOException { 
String message = new String(body, "UTF-8"); 
System.out.println(" [x] Message '" + message); 
       } 
      }; 
channel.basicConsume("fed.test1", true, consumer); 

Затем опубликовал сообщение на сервере A --->fed.test1

Сообщения было потреблено на сервере B и очередь числа сообщений является zero оба очереди (сервер A, сервер B).

Это работает так, как вы ожидали.

Надеюсь, это поможет.

+0

Обратите внимание, что это не поддерживает единую логическую очередь в федерации. Сообщения на сервере A отправляются на сервер B только в том случае, если есть сообщения для обработки сообщений. Другими словами, это не создает избыточный экземпляр сообщений на каждом сервере. Exchange-федерация, другая опция, просто скопирует сообщения на нижестоящий сервер, оставляя на каждом сервере два отдельных, но одинаковых расходных сообщения. Кажется, что нет опции, которая будет поддерживать копию сообщений и обеспечивать единую доставку. –

 Смежные вопросы

  • Нет связанных вопросов^_^