camel jms请求/回复

时间:2012-12-13 09:59:26

标签: jms apache-camel

我很骆驼,所以如果这很明显,请原谅我。

我们正在尝试设置一个骆驼路线(在talend esb中),它执行以下操作:

  1. 收到JMS的消息
  2. db update
  3. 使用请求/回复
  4. 通过JMS将消息发送到另一个系统
  5. 使用回复中的信息进行另一次数据库更新
  6. 这是一条路线。 我发现的是该路由在等待3中的回复时不再接受1中的消息。

    我曾尝试在JMS组件上使用“asyncConsumer”参数,但这没有帮助。

    如何设计路由,以便在仍在等待3中的回复时处理第二个(以及更多)消息?

    谢谢, LACI

2 个答案:

答案 0 :(得分:2)

Petter解释的参数将有所帮助,但您仍将阻止线程。另一种方法是将集成设计为两个单独的路径。在第一个路由中,您将收到jms消息,更新数据库并发送第二条消息。

如果在此路由的生产者上使用InOnly并设置JMSReplyTo以及preserveMessageQuo = true,则camel将发送消息但不等待回复。

然后使用第二个路由侦听对指定队列的回复,并执行第二个db更新。这样你就不会阻塞任何线程。

答案 1 :(得分:1)

使用concurrentConsumers属性。它将使多个线程能够处理您的负载。请注意,您必须指定线程数。对于所有选项,这可能有点复杂,因此请务必正确阅读Camel JMS文档。

示例 from("jms:myQueue?concurrentConsumers=10")

您可能还想在请求回复的回复队列中指定concurrentConsumers: .inOut().to("jms:requestQueue:foo?concurrentConsumers=10")

最后一部分需要version 2.10.3