【问题标题】:Does camel jetty-activemq create new activemq connection for each messagecamel jetty-activemq 是否为每条消息创建新的 activemq 连接
【发布时间】:2012-10-18 03:49:46
【问题描述】:

我已经定义了一个camel jetty-activemq路由如下:

from("jetty:http://0.0.0.0:8087/url1").to("activemq:queue:queue1)

camel 是否创建一个 activemq 连接,然后将该连接用于 jetty 接收到的所有消息,或者为每条消息创建一个 activemq 连接。

我打算为 activemq 使用池连接,因为我每秒的消息流入量非常高,我需要了解骆驼行为来定义最大连接池大小。

【问题讨论】:

    标签: java jetty activemq apache-camel


    【解决方案1】:

    ActiveMQ 组件以及 JMS 组件在发送消息时基于 Spring Framework 中的 JMSTemplate。

    正如您所担心的那样,它会为每条消息创建和关闭一个连接+会话+生产者,这并不是最佳性能。

    按照activemq component documentation 中的建议,您应该使用池进行设置。然后你将重用连接/会话/生产者。

    如果您打算仅将其用于此路由,您实际上可以只使用该池中的一个连接。

    ActiveMQ 使用 JMSTemplate 制作了summary of tips and tricks。值得一读。

    更新:关于并发相关的连接数:

    简单地说,连接是与代理的网络连接(“套接字”),它在许多线程之间共享。您的每个线程仍将拥有自己的(池化)会话,该会话使用共享连接并同时运行。如果您有多个 ActiveMQ 代理并希望在它们之间进行负载平衡(假设 ActiveMQ 是瓶颈,而不是您的应用程序),多连接仍然可能是一种增强功能。

    failover:(ssl://host1:61616,ssl://host2:61616)
    

    也可能是,在实践中,通过使用一组有限的连接而不是一个连接,性能可能会在一定程度上有所提高,但您可能必须针对您的特定环境进行测试。

    【讨论】:

    • 谢谢皮特。这有助于理解。为什么说“实际上可以只使用一个连接”。听起来只有一个线程连接到 activemq。那将是一个瓶颈。码头端点上的 minThreads 和 maxThreads 是否有助于从 activemq 池创建多个到代理的连接。请发表评论。
    • 添加了更新解释。您应该将 Session 视为主要的“每个线程”对象,而不是连接。
    猜你喜欢
    • 2019-04-02
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多