当前位置: 首页 > 知识库问答 >
问题:

骆驼JMS请求/回复

田永春
2023-03-14

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

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

    < li >通过JMS接收消息 < li >数据库更新 < li >通过JMS使用请求/回复将消息发送到另一个系统 < li >使用回复中的信息进行另一次数据库更新

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

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

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

谢谢,拉西

共有2个答案

越伟泽
2023-03-14

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

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

您可能还需要在请求回复的回复队列上指定concurrentConsumers:.inOut().to(“jms:requestQueue:foo?concurrentConservators=10”)

最后一部分需要版本2.10.3。

於功
2023-03-14

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

如果在此路由的生成者上使用InOnly并设置JMSReplyTo和preserveMessageQuo=true,那么camel将发出消息,但不等待回复。

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

 类似资料:
  • 我尝试了很多方法来使用camel gzip请求(在json中),我们使用camel调用rest web服务。 请求将在正文中,因为我们在POST请求中发送它 问候哈里

  • 我有一个从JMS队列读取项目并将其写入数据库的路径。 我已经阅读了关于ApacheCamelJMS组件的文档,但我没有得到我的问题的确切和明确的答案,即“如果路由中出现异常,JMS消费者是否会重新插入项目或解锁JMS队列中的消息?”。 谢谢 阿里

  • 当从JMS向Kafka发送消息时,路由运行良好。

  • 这是我的骆驼上下文摘录:- 下面是日志中的一个片段:- 即使是也不能阻止堆栈跟踪。现在我已经发现,如果我向JMS消费者添加disableReplyTo=true,那么stacktrace就不会显示哪一个是优秀的。

  • 我正在构建一个高负载http服务,该服务每秒将消耗数千条消息,并将其传递给activemq之类的消息传递系统。 我目前有一个rest服务(非驼峰,非jetty),它接受来自http客户端的帖子并返回一个简单成功的响应,我可以使用apache ab对此进行负载测试。 我们还将camel-jetty视为输入endpoint,因为它具有actiemq的集成组件,并在需要时成为esb的一部分。在我开始构建

  • 我试图在camel中获取请求/回复jms消费者,收到了传入消息,我可以看到camel也发送了回复,但消息没有被封送。 我正在使用拦截器封送所有来自activemqendpoint的消息 (我扩展了JacksonDataFormat,以便在封送消息时填充JMSType。) 对于正常的单向交换,这是可行的(例如) 但是当我走这条路的时候 并将带有JMSReplyTo消息的消息发送到测试队列(使用act