JMS(Jboss Messaging)的一點使用心得(十三)拔網線后的重連----JMS Connection原理淺析及應用(zhuan)
在前面的文章里,我們介紹了可以自動重連的JmsMessageListenerContainer,自動重連的原理就是利用了JMS Connction的ExceptionListen機制。現在我們討論一下Jms Connection的簡單原理及應用。Jboss Messaging管理了兩組Connection,Server端的和Client端的;其實他們都是一個東西,因為連接都是相互的嘛。
Server端的Connection管理是利用 [org.jboss.jms.server.connectionfactory.ConnectionFactory]實現的,大家可以在[\ jboss-4.2.2.GA\server\messaging1.4SP3\deploy\jboss-messaging.sar\connection -factories-service.xml]里配置它,大家也可以通過源碼來研究。不管是Serber端還是Client端都從這個Factory里 面拿Jms Connection。
另外,對Client的Jms Connction還有一個設置,就是[org.jboss.remoting.transport.Connector]的設置,它配置在[\ jboss-4.2.2.GA\server\messaging1.4SP3\deploy\jboss-messaging.sar\remoting -bisocket-service.xml]里。
根據Jboss Messaging的默認配置,Server端Jms Connection的每隔30秒會去Check一下所有的JMS 連接,如果發現連接錯誤,則該連接就會被回收,以提供給其他的Client端使用。這樣做是為了避免出現大量無用連接而耗費系統資源。而Client端的 連接自動Check間隔為5分鐘,就是說如果直到Client端和Server端的連接斷掉5分鐘后,才會觸發Client端Jms Connection的onException。
這樣就會出現一種可能,假如Client端和Server端的網線中斷時間在30秒~5分鐘之間,Server端已經回收了該連接,而Client卻認為這個連接仍然OK,那Client端就永遠收不到Jms消息了...
我們可以通過修改設置來解決這個問題。首先看看Server端,考慮到Server端的性能和穩定性,我們決定不做修改。只有改Client端了。如果我 們讓Client的連接Check時間小于或者等于30秒,比如說29秒,就可以解決這個問題。于是我們可以做以下修改:
1. connection-factories-service.xml



























































































































































2. remoting-bisocket-service.xml
































































問題解決。OK!