我正在使用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
)。
有人能说出原因吗?任何帮助表示赞赏。