【问题标题】:Completed exchange in the scope of http4-component在 http4-component 范围内完成交换
【发布时间】:2021-07-24 11:04:07
【问题描述】:

我有一个简单的 Camel 路由,消耗来自 ActiveMQ 的消息,处理它们并将它们转发到 Rest webservices:

from("activemq:MyQueue").process("MyProcessor").to("http4:uri");

我在activemq-component的connectionfactory中配置concurrentConsumers=100。

在文档中:

if asyncConsumer is disabled(default) then the Exchange is fully processed before the JmsConsumer will pickup the next message from the JMS queue

问题: 在我的路线中,每条消息的交换何时被完全处理? http-callee收到http响应后?如果是这样的话,我想,我的路由配置意味着:

  1. 一开始,每个消费者消费1条消息并转发到http
  2. 这 100 个消费者中的每一个都在等待,并且只有在当前 http 调用从当前消息中获得 http 响应时才会再次消费。

另一个问题: 我发现http4组件选项connectionsPerRoute的默认值=20。我有 100 个消费者,我应该设置connectionsPerRoute=100 吗?

谢谢你, 哈迪

【问题讨论】:

    标签: apache-camel


    【解决方案1】:

    每个 jms 线程同时运行而不知道彼此。在您的示例中,同时处理 100 个线程而不会被阻塞。您不需要考虑 http 组件的线程数,因为这是通过 jms 线程从头到尾完成的。

    【讨论】:

    • 我可以依赖这个语句“如果 asyncConsumer 被禁用(默认),那么在 JmsConsumer 将从 JMS 队列中提取下一条消息之前完全处理 Exchange ”?当前messageExchange完成后,每个消费者是否真的消费了Queue中的下一条消息?这是我想要的功能。我确实需要将connectionsPerRoute 配置为默认值为20。我有100 个消费者,每个消费者都应该将消息同时路由到一个http-uri。所以我需要connectionsPerRoute=100。如果我保持 20 岁,我可以在日志中看到 WAITING。
    猜你喜欢
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    • 2021-10-23
    • 2021-08-19
    • 2019-02-21
    相关资源
    最近更新 更多