RabbitMQ Shovel основной пример

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

Мне нужно пересылать сообщения с одной машины (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:status().' на машине1:

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

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

Где проблема? Чего-то не хватает в conf брокера 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}
              ]}
            ]}
 ]}.
Другие вопросы по тегам