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}
]}
]}
]}.