各位,activemq可以限制客户端连接数吗

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了各位,activemq可以限制客户端连接数吗相关的知识,希望对你有一定的参考价值。

参考技术A 可以 生产者和消费者可以使用不同的传输协议来传输消息,ActiveMQ提供了广泛的连接模式,包括HTTP/S、JGroups、JXTA、muticast、SSL、TCP、UDP、XMPP等。
<transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> <transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors>
可以看出最大连接数是1000,最大容量是100m

ActiveMq:超过允许的最大客户端连接数

【中文标题】ActiveMq:超过允许的最大客户端连接数【英文标题】:ActiveMq: Exceeded the maximum number of allowed client connections 【发布时间】:2018-02-12 14:06:47 【问题描述】:

在我的 .Net 应用程序中,所有组件都在与 ActiveMQ 交互,但在处理少量消息后,它开始报错:

无法接受连接:org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException: 超过允许的最大客户端连接数。”。

我在网络配置中增加了最大连接数,但它不起作用。 我听说对于这种情况,您应该使用 PooledConnectionFactory。 你们能否建议我们如何实现 PooledConnectionFactory 或者是否有其他替代方法。

提前致谢!!

【问题讨论】:

我在ActiveMQ的配置文件中配置了10个连接,只使用了2个连接。虽然我正在处理来自客户端应用程序的连接,但一段时间后出现“超出允许的最大客户端连接数”异常。无法弄清楚它在哪里消耗 10 个连接。我们可以通过任何方式检查连接服务器现在安装 ActiveMQ 的位置?? 我在我的 .Net 应用程序中使用 Apache.NMS dll,maximumConnections 设置为 1000,但在 Connector openwire 部分的 Active MQ 控制台屏幕中,我只能看到 100 个连接。那为什么我会得到这个异常。需要建议。谢谢 【参考方案1】:

首先,您可以在代理传输连接器配置中配置代理将接受多少个连接,例如在你的 activemq.xml

<transportConnectors>
  <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000"/>
</transportConnectors>

1000 个连接应该是在 ActiveMQ 的 Apache 发行版中配置的默认限制。 除非您的限制出乎意料的低,否则您的客户端应用程序中的连接可能会泄漏,这应该很容易使用 netstat 等命令进行验证。

我不是 ActiveMQ NMS 专家,但据我所知,.NET 没有 PooledConnectionFactory

http://activemq.apache.org/nms/msdoc/1.6.0/vs2005/Output/html/N_Apache_NMS.htm

这仅适用于 Java。 前面的回答是对的,你应该尝试重新使用现有的连接到代理。连接创建被认为是一项繁重的操作。每次都重新创建连接是一种反模式,泄漏连接当然是一个错误。

【讨论】:

你能告诉我在什么情况下通常会出现这个错误,或者我需要查看哪些区域来解决这个错误。它不是定期出现,而是每周一次或两次重现。 您应该能够使用 netstat 或类似的操作系统级别命令来检查您在任何时间点与代理的连接数。如果该数量达到代理配置中配置的最大连接数限制,您将收到该错误。在此基础上,尝试找出哪些客户端可能会打开比预期更多的连接,并检查其代码以分析如何更改它们以在许多消息中重用连接。 我正在为 ActiveMQ 使用 Apache.NMS dll。我们可以检查客户端是否已达到最大连接限制。然后我们可以释放 /reset 连接吗?【参考方案2】:

在生成消息时尝试以某种方式重用您的 Connection。比如,保持一个开放的连接,而不是为每条消息打开/关闭。

Spring.NET 中提供了一个 CachingConnectionFactory,可以简化此任务。

【讨论】:

我需要在我的 ActiveMQ 所在的服务器端实现这个 CachingConnectionFactory 吗? . 无客户端。这个想法不是为每条消息重新建立一个连接,而是尽可能地重用现有的连接。来自客户。 首先我不是一次又一次地创建连接。如果出现错误,我也会处理它。通过 Spring.NET,但我无法弄清楚如何在我的应用程序中实现 CachingConnectionFactory。您是否还有其他链接可以演示此内容。

以上是关于各位,activemq可以限制客户端连接数吗的主要内容,如果未能解决你的问题,请参考以下文章

Activemq - 超过允许的最大客户端连接数

ActiveMQ - 客户端已连接相同的 clientId 错误

ActiveMQ配置ssl安全连接

我可以限制从 Hive 中的文件加载的记录数吗

activemq连接过多导致变慢

activemq消息积压处理