骆驼不断发送消息

时间:2014-08-12 08:58:22

标签: apache-camel rabbitmq

我正在使用Camel进行集成。我有一个用例,Camel应该将1条消息从一个队列传输到另一个队列,但它会不断向队列发送相同的消息。请查看我的以下路线:

ProducerTemplate正在按以下方式创建消息:

ProducerTemplate template = context.createProducerTemplate();
template.sendBody("direct://input", "This is a test message: ");

我有一条路由将消息从直接组件传输到rabbitmq队列。

public void configure() throws Exception {
                from("direct://input")
                .to("rabbitmq://localhost:5672/test_ip?queue=task_queue&routingKey=test_task" +
                                "&autoAck=true&durable=true&username=guest&password=guest&autoDelete=false&exchangePattern=InOut")

            }

然后我有一条路线将消息从task_queue转移到out_queue

 public void configure() throws Exception {
                from("rabbitmq://localhost:5672/test_ip?queue=task_queue&username=guest&routingKey=test_task&password=guest" +
                        "&autoAck=true&durable=true&exchangeType=direct&autoDelete=false&exchangePattern=InOut")
        .process(new Processor() {
                            @Override
                            public void process(Exchange exchange) throws Exception {
                                exchange.setOut(exchange.getIn());
                                Message m = exchange.getOut();
                                org.apache.camel.TypeConverter tc = exchange.getContext().getTypeConverter();
                                String strValue = tc.convertTo(String.class, m.getBody());
                                System.out.println("[[task_queue -- out_queue]]: "  + strValue);
                            }
                        })
                       .to("rabbitmq://localhost:5672/test_op?queue=out_queue&routingKey=test_out&username=guest&password=guest" +
                            "&autoAck=true&durable=true&exchangeType=direct&autoDelete=false&exchangePattern=InOut");
            }

我的程序中只有这两条路线,没有别的。现在,当我运行它时,我得到以下输出:

[[task_queue -- out_queue]]: This is a test message: 
[[task_queue -- out_queue]]: This is a test message: 
[[task_queue -- out_queue]]: This is a test message: 
[[task_queue -- out_queue]]: This is a test message: 
[[task_queue -- out_queue]]: This is a test message: 
.
.
(continuous stream till I kill program)

我上面显示的输出不是预期的输出。它不应该多次打印输出消息,但它应该只出一次。这意味着一次又一次地处理1条消息(并转移到out_queue)。

有谁可以提出原因?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)