2017-06-16 58 views
1

我有一个东西如下:阿帕奇骆驼重新启动路线

from("rabbitmq://...") 
    .process(processor1) 
      : 
    .process(processorn) 
    .process(SendToExternalAppProcessor) 

SendToExternalAppProcessor.process()使用生产模板,让从内容中exchange参数形成的一些请求转发给其他rabbitmq2sendBody()方法。

问题是,一旦SendToExternalAppProcessor.process()执行并且上面的路由执行,它将再次重新启动上面的路由以及rabbitmq2的监听程序。

我在这里失踪了什么?是否有任何apache camel配置从我的注意力中滑落?

PS:我知道我没有在这里给出任何具体的代码,以便在您的机器上复制场景,但希望经验丰富的头部和眼睛能够快速回想并提出建议。 (我也不能立时分享我的项目代码以及它的大而复杂的)

更新:
我试图通过评论sendBody(),仍然重新启动路线。我必须在这里错过一些奇怪的基本设置...

+0

你可以分享任何日志消息吗?你有什么迹象表明路线正在重新启动? –

回答

0

我认为这只是对路线工作方式的误解。 'from'不是一次性事件;它会继续接收来自源的消息,直到您明确告诉路由停止。

+0

我明白这一点。我发布了单个消息给rabbitmq。他们听到那个rabbitmq的'from()'是否有任何机会可以无限运行。我想它应该只运行一次正确的单个消息发布给它? – anir

+0

嗯...也许这个消息是一个InOut交换类型,它将回到'from'端点?也许启用消息跟踪并查看。您也可以在'from'之后添加: .setExchangePattern(ExchangePattern.InOnly) 以强制它并查看是否改变了行为。 –

0

“from”作为正常rabbitmq消费者使用。路线被设计为一直运行。

如果您只是想将交换转移到另一个rabbitmq,“to”就足够了。

from("rabbitmq://...") 
    .process(processor1) 
      : 
    .process(processorn) 
    .to("rabbitmq://rabbit2...") 
0

请让我们知道您正在使用哪种骆驼版本。 您是否使用交易骆驼流?如果任何事务模式处于打开状态,则可能有一个问题可能是JMS提交确认。可能是骆驼正在消费和处理消息,但不承认rabbitmq。所以消息仍然存在,骆驼路线一次又一次地消耗。默认情况下它是AUTO_ACKNOWLEDGE,所以不应该是这种情况,如果没有交易骆驼路线。