RabbitMQ铲子基本的例子

时间:2014-01-07 08:55:02

标签: jms rabbitmq message-forwarding rabbitmq-shovel

我正在研究一个基本的例子,但我无法解决这个问题。

我需要通过队列(TestQ)将消息从一台机器(Machine1)转发到另一台机器(Machine2)。 生产者正在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'habit_shovel_status:status()。'在Machine1上:

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

生产者发送确定,但我从未在Machine2上收到消费者的接收。

哪里有问题? Machine1的经纪人或Machine2的经纪人的内容中缺少什么东西?

谢谢!

1 个答案:

答案 0 :(得分: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}
              ]}
            ]}
 ]}.