4

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

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

  1. 通过 JMS 接收消息
  2. 数据库更新
  3. 通过 JMS 使用请求/回复将消息发送到另一个系统
  4. 使用回复中的信息进行另一个数据库更新

这一切都在一条路线上。我发现该路由不再接受 1 中的任何消息,而它正在等待 3 中的回复。

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

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

谢谢,拉西

4

2 回答 2

2

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

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

然后,您使用第二条路由来侦听对您指定的队列的回复并进行第二次数据库更新。这样你就不会阻塞任何线程。

于 2012-12-14T08:16:27.370 回答
1

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

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

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

最后一部分需要2.10.3 版本

于 2012-12-13T15:13:02.207 回答