每當一個JMS客戶端希望與一個MQ代理,然後典型代碼連接是這樣的:
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
connection = connectionFactory.createConnection();
現在,一旦JMS客戶端(生產者/消費者),如果它不關閉連接完成那麼JMS客戶端仍將保持與MQ代理的連接,並將與MQ代理建立連接。現在,在你的情況下,看起來你的JMS客戶端代碼「可能有問題」並且沒有關閉連接,所以你需要檢查你的JMS客戶端代碼並像下面那樣關閉連接。現在
if (connection != null) {
connection.close();
}
,話說回來,如果你有消息監聽器的JMS客戶端,然後預計連接將保持開放,但在情況下,如果這些連接是完全不活動的一段時間後,你可以指定最大閒置持續時間使用wireFormat.maxInactivityDuration
,這個時候要創建一個使用MQ代理的連接,那麼你應該創建一個這樣cf = new ActiveMQConnectionFactory( "tcp://localhost:61616?wireFormat=openwire&wireFormat.maxInactivityDuration=<<whatever_value_you_want>>");
讀this ActiveMQ的更多細節文件的連接。
作爲FYI - 在一個ActiveMQ代理連接的最大數目是使用其配置文件activemq.xml
定義內,你有,你定義的最大連接(?maximumConnections=1000
),如下所示transportConnectors
元件,所以只是在如果你有適當的系統資源,並且你有能力獲得更多的客戶端連接,那麼你可以增加。
<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>
嗨@hagrawal感謝您的重播,因爲你說我檢查了我的代碼所有連接都越來越關閉connection.close(); ,案例1:事實上,當用戶在網絡上登錄時,通過tcp連接訂閱了一個主題,它沒有像用戶註銷或會話過期時那樣關閉。 – user4045063
案例2:在隊列中放置消息時,最終用戶的互聯網連接受到干擾,並且MQ無法向請求使用發送確認,以便連接保持。在一段時間關閉連接之後,可以在activemq.xml中進行任何更改。 – user4045063
對於你的情況1:正如你所提到的,清楚的問題是,當用戶註銷或如果會話過期,那麼你必須關閉連接。對於情況2:就像我說過的,你可以指定最大無活動時間,也可以用類似的方式超時參數,請閱讀這裏 - http://activemq.apache.org/tcp-transport-reference.html。看看你的情況,我認爲你應該配置緩慢的消費者,請閱讀 - https://planet.jboss.org/post/coming_in_activemq_5_9_a_new_way_to_abort_slow_consumers – hagrawal