在我的.Net应用程序中,所有组件都与ActiveMQ进行交互,但在处理了少量消息之后,它开始给出错误:
“无法接受连接:org.apache.activemq.transport.tcp.ExceededMaximumConnectionsException:超过允许的最大客户端连接数。”。
我增加了网络配置中的最大连接数但它无法正常工作。 我听说在这种情况下你应该使用 PooledConnectionFactory 。 你们可以建议我们如何实现PooledConnectionFactory,还是有其他选择。
先谢谢!!
答案 0 :(得分:1)
尝试在生成邮件时以某种方式重用您的Connection。比如,为每条消息保持一个开放的连接,而不是打开/关闭。
Spring.NET中提供了一个可以简化此任务的CachingConnectionFactory。
答案 1 :(得分: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。 之前的回复是对的,您应该尝试重用现有的连接到代理。连接创建被认为是一项繁重的操作。每次重新创建连接都是反模式和泄漏连接当然是一个错误。