`

Active MQ技术文章 -- Active Mq连接池重连

    博客分类:
  • MQ
 
阅读更多

现象

    Active Mq 客户端连接Active Mq服务端时,如果因为服务器重启等原因导致Mq客户端无法发送Mq消息

原因

   Mq客户端的连接和服务端已经断开,但是客户端没有进行重连

解决方法

   Mq断开连接后,可以自动重连

 

 

main.properties

 

main.openmq.sName=330103000000800536
main.openmq.sPwd=123456
main.openmq.sIp=10.30.4.89
main.openmq.sPort=57666
 

spring+Active的配置:

 

 
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xmlns:context="http://www.springframework.org/schema/context"
     xsi:schemaLocation="
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
     http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
     
 
  	<context:annotation-config />
  	<context:component-scan base-package="
  		com.dahuazwan.ihds.mq.productor
  	" />
  	<!-- enable transaction demarcation with annotations -->
  	<tx:annotation-driven /> 
   
 	<!-- OpenMq -->
    <bean id = "connectionFactory" class = "org.apache.activemq.ActiveMQConnectionFactory">  
    	<property name="brokerURL" value="tcp://${main.openmq.sIp}:${main.openmq.sPort}" />
 		<property name="userName" value="${main.openmq.sName}" />
    	<property name="password" value="${main.openmq.sPwd}" />
	</bean>  
	
	<!-- 采用TCP长连接方式, 避免每次建立短连接需要的额外工作时间 -->
    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory">
        <constructor-arg ref="connectionFactory"></constructor-arg>
    </bean>

	<!-- jms Template -->
	<bean id="innerJmsTemplate"
        class="org.springframework.jms.core.JmsTemplate" >
        <property name="connectionFactory" >
        	<bean class="org.springframework.jms.connection.SingleConnectionFactory">
                <property name="targetConnectionFactory" ref="pooledConnectionFactory" />
                <property name="reconnectOnException" value="true"/>
            </bean>
        </property>
        <property name="timeToLive" value="1000000"/>
        <property name="receiveTimeout" value="222222" />
    </bean>
 
    <!-- Sms Destination -->
    <bean id="smsDestination" class="org.apache.activemq.command.ActiveMQTopic">       
        <constructor-arg index="0" value="zw.public.all.sms"/>       
    </bean>

</beans> 

 里面的关键代码段是:

 

<property name="connectionFactory" >
        	<bean class="org.springframework.jms.connection.SingleConnectionFactory">
                <property name="targetConnectionFactory" ref="pooledConnectionFactory" />
                <property name="reconnectOnException" value="true"/>
            </bean>
        </property>

 如果设置reconnectOnException=true,则Jms连接发生异常时,重新向服务端发起连接,默认是false

 

 

 

参考文献

Spring JMS (3)

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics