【问题标题】:How to configure ActiveMQ connection pool in WSO2 ESB?如何在 WSO2 ESB 中配置 ActiveMQ 连接池?
【发布时间】:2014-03-20 01:47:35
【问题描述】:

我们正在使用 WSO2 ESB 对 ActiveMQ 进行直通代理。看起来 WSO2 将为每个请求使用一个新连接,这在单台机器上为我们提供了低于预期的吞吐量(500 多个并发用户)。在深入研究文档后,我们发现您可以将缓存与 JMSSender 配置一起使用。这确实通过在生产者级别缓存(包括连接和会话缓存)增加了吞吐量,但缺点是如果 Activemq 机器被反弹,那么 WSO2 将不会重新连接,要使其重新连接,则必须打开缓存关闭,因此我们无法使用它。

我很惊讶在 WSO2 ESB 中找不到任何 ActiveMQ 连接池设置。 WSO2 ESB 的 ActiveMQ 连接池是否真的没有任何配置,或者我们遗漏了一些明显的东西。创建您自己的连接池工厂是这里唯一的选择吗?

我们的配置: WSO2 ESB 4.8.0 在自己的机器上,ActiveMQ 5.9 在自己的机器上

附言 我们知道生产者和 activemq 的优化并已应用它们,在代理上使用 nio 协议,在生产者和代理上配置传输级别参数,在同一台机器上使用 vm:/ 和 WSO2 和 ActiveMQ,虽然这确实显着增加了吞吐量,但没有不要把我们带过头。我们真的需要弄清楚如何进行连接池。我们期望每秒处理 10+k 条消息,其中包含 1.5k 条消息的负载。

感谢您的所有帮助。

【问题讨论】:

  • 您的问题解决了吗?我在这里有点类似的问题..
  • 不,我们放弃了 WSO2 ESB,转而使用 Tomcat 和 ActiveMQ。

标签: wso2 activemq esb


【解决方案1】:

如果 WSO2 包含生产者级别的池,问题是如果它关闭,它会失去与 ActiveMQ 的连接,那么我建议您在配置 ActiveMQConnectionFactory 时检查是否使用了 failover: 传输。可靠地重新连接取决于库。

就您的目标吞吐量而言,假设持久消息,10k msgs/s 听起来有点高。无论 WSO2 如何连接到它,您都应该测试 ActiveMQ 是否会在您的目标硬件上处理它。有关详细信息,请参阅ActiveMQ Performance Module User Manual。如果你不能,有办法让性能达到那个水平,但那是另一回事了。

【讨论】:

  • 谢谢杰克。我们的理解是 WSO2 不包含关于 ActiveMQ 的任何类型的池,它只是缓存。我们为 ActiveMQ 使用单机,所以不确定是否可以选择故障转移?我们已经测试了带有持久队列的 ActiveMQ,吞吐量在 13-15k msgs/sec 之间,因此 ActiveMQ 不是瓶颈。
  • 如果你能得到 WS02 使用的 ConnectionFactory 的句柄,你可以用 PoolingConnectionFactory 包装标准的 ActiveMQ。
  • 哦,故障转移:绝对是一种选择 - 如果对单个代理使用,传输提供简单的重新连接功能。
  • 谢谢,到目前为止,我们最终创建了一个包装器以在 WSO2 中使用 PoolingConnectionFactory。然而,似乎有 10 个连接的硬编码限制,我们似乎无法增加......到目前为止,我们可以降低并看到它正确反映,所以我们的包装器工作正常。看起来我们可能不得不查看源代码来突破这个限制。有什么线索吗?我们还将尝试故障转移以查看重新连接是否针对单个代理工作。
  • JMS 连接类似于出站套接字。在实践中,您实际上并不需要超过一个。每个使用它们发送的线程都需要自己的 Session (connection.createSession()),推测也许 WSO2 将这两个概念混为一谈并锁定了连接?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-29
  • 2012-12-22
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
相关资源
最近更新 更多