2017-09-04 273 views
0

在我的.NET應用程序的所有組件和ActiveMQ交互的最大數量,但處理一些消息後,它開始給錯誤:的ActiveMQ:已超過允許的客戶端連接

無法接受連接:org.apache。 activemq.transport.tcp.ExceededMaximumConnectionsException:超出了允許的客戶端連接的最大數量「。

我增加了web配置中的最大連接數,但它不工作。 我聽說在這種情況下,您應該使用PooledConnectionFactory。 你們可以請你建議我們如何實現PooledConnectionFactory或者是否有任何其他的選擇。

在此先感謝!

+0

我在ActiveMQ的配置文件中配置了10個連接,並且只使用了2個連接。雖然我正在從我的客戶端應用程序中處理連接,但在一段時間後出現「超出允許的最大客戶端連接數」的例外情況。無法確定它消耗10個連接的位置。我們可以通過哪種方式檢查服務器現在連接ActiveMQ的地方的連接? – user2750155

+0

我在我的.Net應用程序中使用Apache.NMS dll,maximumConnections設置爲1000,但是在連接器openwire部分的Active MQ控制檯屏幕中,我只能看到100個連接。那爲什麼我得到這個例外。需要建議。 Thnx – user2750155

回答

0

嘗試重新生成消息時以某種方式連接您的連接。比如,保持一個開放的連接而不是打開/關閉每條消息。

Spring.NET中提供了一個CachingConnectionFactory,可以簡化此任務。

+0

我是否需要在ActiveMQ存在的服務器端實現此CachingConnectionFactory? 。 – user2750155

+0

沒有客戶端。我們的想法是不要爲每個消息重新建立連接,而是儘可能重用現有連接。來自客戶。 –

+0

首先,我不是一次又一次地創建連接。如果錯誤,我也處置它。通過Spring.NET走了,但我無法弄清楚如何在我的應用程序中實現CachingConnectionFactory。你有另外的其他鏈接來證明這件事。 – user2750155

0

首先,您可以配置代理在代理傳輸連接器配置中可以接受的連接數量,例如,在activemq.xml中

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

1000連接應在ActiveMQ中的Apache發行配置的默認限制。 除非你有意想不到的低限,否則你的客戶端應用程序可能會泄漏連接,這應該很容易使用netstat之類的命令進行驗證。

我不是ActiveMQ的網管專家,但據我所知,是.NET

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

沒有PooledConnectionFactory這是僅適用於Java的。 以前的回覆是正確的,你應該嘗試重新使用現有的連接到經紀人。連接創建被認爲是一項繁重的操作。每次重新創建連接都是反模式,泄漏連接當然是一個錯誤。

+0

您能否告訴我在哪種情況下通常會出現此錯誤,或者我需要查看哪些區域來解決此錯誤。它不是經常性的,而是每週一次或兩次複製。 – user2750155

+0

您應該可以使用netstat或類似的os級別命令來檢查您在任何時間點與代理有多少連接。如果該數字達到您的代理配置中配置的maximumConnections限制,則會出現該錯誤。基於此嘗試找出哪些客戶端可能會打開比預期更多的連接,並檢查他們的代碼以分析如何更改它們以跨多條消息重新使用連接。 –

+0

我使用的是ActiveMQ的Apache.NMS dll。我們可以檢查客戶端是否達到了最大連接限制。然後我們可以釋放/重置連接? – user2750155