Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          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
          <?xml version="1.0" encoding="UTF-8"?>

          <!--
               Messaging Connection Factories deployment descriptor.

               $Id: connection-factories-service.xml 3201 2007-10-19 10:39:50Z timfox $
           
          -->

          <server>

             
          <!-- The default connection factory does not support automatic failover or load balancing-
                  this is so we can maintain compatiblity with applications written for JBoss MQ which use this
                  connection factory.
             
          -->     
             
          <mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
                name
          ="jboss.messaging.connectionfactory:service=ConnectionFactory"
                xmbean-dd
          ="xmdesc/ConnectionFactory-xmbean.xml">
                
          <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
                
          <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=bisocket</depends>
                
          <depends>jboss.messaging:service=PostOffice</depends>

                
          <attribute name="SupportsFailover">true</attribute>
                
          <!--不需要系統接管RemotingCheck-->
                
          <attribute name="DisableRemotingChecks">true</attribute>
                
                
          <attribute name="JNDIBindings">
                   
          <bindings>
                      
          <binding>/ConnectionFactory</binding>
                      
          <binding>/XAConnectionFactory</binding>
                      
          <binding>java:/ConnectionFactory</binding>
                      
          <binding>java:/XAConnectionFactory</binding>
                   
          </bindings>
                
          </attribute>
             
          </mbean>

             
          <!-- A clustered connection factory that supports automatic failover and load balancing of created
                  connections.
                  This factory is not suitable to be used by MDBs.
             
          -->
             
          <mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
                name
          ="jboss.messaging.connectionfactory:service=ClusteredConnectionFactory"
                xmbean-dd
          ="xmdesc/ConnectionFactory-xmbean.xml">
                
          <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
                
          <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=bisocket</depends>
                
          <depends>jboss.messaging:service=PostOffice</depends>
                
          <attribute name="DisableRemotingChecks">true</attribute>

                
          <attribute name="JNDIBindings">
                   
          <bindings>
                      
          <binding>/ClusteredConnectionFactory</binding>
                      
          <binding>/ClusteredXAConnectionFactory</binding>
                      
          <binding>java:/ClusteredConnectionFactory</binding>
                      
          <binding>java:/ClusteredXAConnectionFactory</binding>
                   
          </bindings>
                
          </attribute>

                
          <attribute name="SupportsFailover">true</attribute>
                
          <attribute name="SupportsLoadBalancing">true</attribute>      
             
          </mbean>
             
             
          <!-- A connection factory with no JNDI bindings that is used in clustering to create the connections that
                  pull messages from one node to another
             
          -->
             
          <mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
                name
          ="jboss.messaging.connectionfactory:service=ClusterPullConnectionFactory"
                xmbean-dd
          ="xmdesc/ConnectionFactory-xmbean.xml">
                
          <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
                
          <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=bisocket</depends>
                
          <depends>jboss.messaging:service=PostOffice</depends>
                
          <attribute name="SupportsFailover">false</attribute>
                
          <attribute name="SupportsLoadBalancing">false</attribute>
                
          <attribute name="DisableRemotingChecks">true</attribute>
             
          </mbean>
             
             
          <!-- An example connection factory with all attributes shown 
             
             <mbean code="org.jboss.jms.server.connectionfactory.ConnectionFactory"
                name="jboss.messaging.connectionfactory:service=MyExampleConnectionFactory"
                xmbean-dd="xmdesc/ConnectionFactory-xmbean.xml">
                
                <constructor>
                
                   <!- - You can specify the default Client ID to use for connections created using this factory - -> 
                   
                   <arg type="java.lang.String" value="MyClientID"/>
                   
                </constructor>
                
                <depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
                
                <!- - The transport to use - can be bisocket, sslbisocket or http - ->
                
                <depends optional-attribute-name="Connector">jboss.messaging:service=Connector,transport=http</depends>
                
                <depends>jboss.messaging:service=PostOffice</depends>
                
                <!- - PrefetchSize determines the approximate maximum number of messages the client consumer will buffer locally - ->
                
                <attribute name="PrefetchSize">150</attribute>
                
                <!- - Paging params to be used for temporary queues - ->
                
                <attribute name="DefaultTempQueueFullSize">200000</attribute>
                
                <attribute name="DefaultTempQueuePageSizeSize">2000</attribute>
                
                <attribute name="DefaultTempQueueDownCacheSize">2000</attribute>
                
                <!- - The batch size to use when using the DUPS_OK_ACKNOWLEDGE acknowledgement mode - ->
                
                <attribute name="DupsOKBatchSize">5000</attribute>
                
                <!- - Does this connection factory support automatic failover? - ->
                
                <attribute name="SupportsFailover">false</attribute>
                
                <!- - Does this connection factory support automatic client side load balancing? - ->
                
                <attribute name="SupportsLoadBalancing">false</attribute>  
                      
                <!- - The class name of the factory used to create the load balancing policy to use on the client side - ->
                
                <attribute name="LoadBalancingFactory">org.jboss.jms.client.plugin.RoundRobinLoadBalancingFactory</attribute>  

                <!- - Whether we should be strict TCK compliant, i.e. how we deal with foreign messages, defaults to false- ->

                <attribute name="StrictTck">true</attribute>
                
                <!- - Disable JBoss Remoting Connector sanity checks - There is rarely a good reason to set this to true - ->
                
                <attribute name="DisableRemotingChecks">false</attribute>

                <!- - The connection factory will be bound in the following places in JNDI - ->

                <attribute name="JNDIBindings">
                
                   <bindings>
                   
                      <binding>/acme/MyExampleConnectionFactory</binding>
                      
                      <binding>/acme/MyExampleConnectionFactoryDupe</binding>
                      
                      <binding>java:/xyz/CF1</binding>
                      
                      <binding>java:/connectionfactories/acme/connection_factory</binding>
                      
                   </bindings>
                   
                </attribute>   
                 
             </mbean>
             
             
          -->

          </server>

          2. remoting-bisocket-service.xml
          <?xml version="1.0" encoding="UTF-8"?>

          <!--
               Standard bisocket-based Remoting service deployment descriptor.

               $Id: remoting-bisocket-service.xml 3409 2007-12-04 21:32:54Z timfox $
           
          -->

          <server>

             
          <!-- Standard bisocket connector - the bisocket transport only opens connection from client->server
                  so can be used with firewalls where only outgoing connections are allowed.
                  For examples of HTTP and SSL transports see docs/examples 
          -->
             
          <mbean code="org.jboss.remoting.transport.Connector"
                    name
          ="jboss.messaging:service=Connector,transport=bisocket"
                    display-name
          ="Bisocket Transport Connector">
                
          <attribute name="Configuration">
                   
          <config>
                      
          <invoker transport="bisocket">
                      
                         
          <!-- There should be no reason to change these parameters - warning!
                              Changing them may stop JBoss Messaging working correctly 
          -->            
                         
          <attribute name="marshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat</attribute>
                         
          <attribute name="unmarshaller" isParam="true">org.jboss.jms.wireformat.JMSWireFormat</attribute>
                         
          <attribute name="dataType" isParam="true">jms</attribute>
                         
          <attribute name="socket.check_connection" isParam="true">false</attribute>
                         
          <!--把Timeout時間修改為29秒,小于30秒-->
                         
          <attribute name="timeout" isParam="true">29000</attribute>
                         
          <attribute name="serverBindAddress">${jboss.bind.address}</attribute>
                         
          <attribute name="serverBindPort">4457</attribute>
                         
          <attribute name="clientSocketClass" isParam="true">org.jboss.jms.client.remoting.ClientSocketWrapper</attribute>
                         
          <attribute name="serverSocketClass">org.jboss.jms.server.remoting.ServerSocketWrapper</attribute>
                         
          <attribute name="numberOfCallRetries" isParam="true">1</attribute>
                         
          <attribute name="pingFrequency" isParam="true">214748364</attribute>
                         
          <attribute name="pingWindowFactor" isParam="true">10</attribute>
                         
          <attribute name="onewayThreadPool">org.jboss.jms.server.remoting.DirectThreadPool</attribute>
                         
          <!-- End immutable parameters -->
                         
                         
          <!-- Periodicity of client pings. Server window by default is twice this figure -->                               
                         
          <attribute name="clientLeasePeriod" isParam="true">10000</attribute>

                         
          <!-- Number of seconds to wait for a connection in the client pool to become free -->
                         
          <attribute name="numberOfRetries" isParam="true">10</attribute>

                         
          <!-- Max Number of connections in client pool. This should be significantly higher than
                              the max number of sessions/consumers you expect 
          -->
                         
          <attribute name="JBM_clientMaxPoolSize" isParam="true">200</attribute>
                         
                         
          <!-- Use these parameters to specify values for binding and connecting control connections to 
                              work with your firewall/NAT configuration
                         <attribute name="secondaryBindPort">xyz</attribute>                           
                         <attribute name="secondaryConnectPort">abc</attribute>               
                         
          -->
                                    
                      
          </invoker>
                      
          <handlers>
                         
          <handler subsystem="JMS">org.jboss.jms.server.remoting.JMSServerInvocationHandler</handler>
                      
          </handlers>
                   
          </config>
                
          </attribute>
             
          </mbean>

          </server>

          問題解決。OK! 

          posted on 2008-09-25 17:33 找個美女做老婆 閱讀(2538) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜宾县| 禄丰县| 定州市| 军事| 彩票| 永胜县| 浦城县| 建德市| 延川县| 商水县| 长白| 弋阳县| 青铜峡市| 浦东新区| 信阳市| 九台市| 金寨县| 华容县| 遂溪县| 房产| 右玉县| 西贡区| 阿勒泰市| 峨边| 正宁县| 黔江区| 绿春县| 寿光市| 清水河县| 大同县| 土默特右旗| 乐都县| 温州市| 惠水县| 丹阳市| 尉氏县| 曲麻莱县| 南昌县| 云浮市| 新田县| 鹤山市|