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

9
在我的.Net应用程序中,所有组件都与ActiveMQ交互,但处理几个消息后,它开始出现错误:
"无法接受连接:org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException:超过允许的客户端连接数的最大数量。"
我已经在web config中增加了最大连接数,但它没有起作用。我听说对于这种情况,您应该使用PooledConnectionFactory。请问您能否建议如何实现PooledConnectionFactory或是否有其他替代方法。
提前感谢!!

我已经在ActiveMQ的配置文件中配置了10个连接,但只使用了2个连接。虽然我正在从客户端应用程序处处理连接,但是过一段时间后会收到“超过允许的客户端连接的最大数量”异常。我无法找出它在哪里消耗了10个连接。有没有办法可以检查ActiveMQ安装位置下服务器当前有多少连接? - semwal
我在我的.Net应用程序中使用Apache.NMS dll,并将maximumConnections设置为1000,但在Active MQ控制台屏幕的Connector openwire部分中,我只能看到100个连接。那么为什么我会收到这个异常?需要建议。谢谢。 - semwal
2个回答

4

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

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

在Apache ActiveMQ分发版中,1000个连接应该是默认限制。除非您的限制意外地很低,否则您可能会在客户端应用程序中泄露连接,可以使用诸如netstat等命令轻松验证。

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

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

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


请问这个错误通常出现在哪些情况下,或者我需要查看哪些方面来解决这个错误。它不是经常出现,但每周会出现一两次。 - semwal
你应该能够使用netstat或类似的操作系统级命令来检查在任何时候有多少连接到代理服务器。如果该数字达到了代理配置中的最大连接数限制,那么你将会收到该错误信息。基于此,尝试找出哪些客户端可能会打开比预期更多的连接,并检查他们的代码以分析如何更改以在多个消息之间重用连接。 - Torsten Mielke
我正在使用Apache.NMS dll来连接ActiveMQ。我们能否检查客户端是否已达到最大连接限制,然后释放/重置连接? - semwal

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

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


我需要在ActiveMQ所在的服务器端实现这个CachingConnectionFactory吗? - semwal
无客户端。该想法是尽可能地重用现有连接,而不是为每个消息重新建立连接。来自客户端。 - Petter Nordlander
首先,我不会一遍又一遍地创建连接。如果出现错误,我也会处理它。我已经研究了Spring.NET,但是我无法弄清楚如何在我的应用程序中实现CachingConnectionFactory。您是否有其他链接可以演示这个问题? - semwal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接