2014-01-07 7 views
2

Я работаю над базовым примером и не могу его обработать.RabbitMQ Лопата базовый пример

Мне нужно переслать сообщения с одной машины (Machine1) в другую (Machine2) через очередь (TestQ). Производитель работает на Machine1 и потребителе на Machine2.

Мои настройки в кролика брокера конфигурации в MACHINE1 в:

{rabbitmq_shovel, [ {shovels, [ 
    {shovel_test, [ 
     {sources, [{broker, "amqp://" }]}, 
     {destinations, [{broker, "amqp://Machine2" }]}, 
     {queue, <<"TestQ">>}, 
     {ack_mode, on_confirm}, 
     {reconnect_delay, 5} 
    ]} 
]} ]} 

machine2 имеет конфигурации по умолчанию и не лопата не плагин включен. Код

продюсера работает на MACHINE1:

ConnectionFactory factory = new ConnectionFactory(); 
factory.setHost("localhost"); 
Connection connection = factory.newConnection(); 
Channel channel = connection.createChannel();  
channel.queueDeclare("TestQ", true, false, false, null); 
channel.basicPublish("", "TestQ", null, "Hello World!".getBytes()); 

код потребителя работает на machine2:

ConnectionFactory factory = new ConnectionFactory(); 
factory.setHost("localhost"); 
Connection connection = factory.newConnection(); 
Channel channel = connection.createChannel(); 
channel.queueDeclare("TestQ", true, false, false, null); 
QueueingConsumer consumer = new QueueingConsumer(channel); 
channel.basicConsume("TestQ", true, consumer); 

while (true) { 
    QueueingConsumer.Delivery delivery = consumer.nextDelivery(); 
    String message = new String(delivery.getBody()); 
    System.out.println(" [x] Received '" + message + "'"); 
} 

Выполнение rabbitmqctl Eval 'rabbit_shovel_status: статус(). на MACHINE1:

[{shovel_test,starting,{{2014,1,7},{9,47,38}}}] 
...done. 

Производитель посылает нормально, но я никогда не получаю получить от потребителя на machine2.

Где проблема? Что-то не хватает в брокере Machine1 или брокере Machine2?

Спасибо!

ответ

1

Состояние вашей лопаты должно быть running, а не starting. Если он остается в фазе starting, это означает, что он не может запускаться правильно (например, не может подключиться к целевому брокеру).

Одна проблема, которую я заметил, это то, что вы использовали broker вместо brokers для указания списка источников. Попробуйте следующее:

{rabbitmq_shovel, 
[{shovels, [{shovel_test, 
       [{sources, [{brokers, ["amqp://"]}]}, 
       {destinations, [{broker, "amqp://Machine2"}]}, 
       {queue, <<"TestQ">>}, 
       {ack_mode, on_confirm}, 
       {reconnect_delay, 5} 
       ]} 
      ]} 
]}. 
+0

'brokers' является допустимым вариантом, на самом деле код в порядке, я нашел проблему в не открывшемся порту на сервере. Это все решило. –