java - Spring MQ JMS reconnect configuration -
first have question on how configure jms mq reconnect application when broker connection shutdown , restarted.
below tried,
this configuration had in spring-mq-jms-connections.xml
<!-- spring jms queue connection factory --> <!-- <bean id="jmsqueueconnectionfactory.7" class="org.springframework.jms.connection.singleconnectionfactory" > <property name="targetconnectionfactory"> <ref bean="internaljmsqueueconnectionfactory.7"/> </property> </bean> --> i replaced below configuration introduced "defaultmessagelistenercontainer" wrap "singleconnectionfactory".
<bean id="jmsqueueconnectionfactory.7" class="org.springframework.jms.listener.defaultmessagelistenercontainer"> <property name="connectionfactory"> <ref bean="single.connection.factory.7"/> </property> <property name="recoveryinterval" value="5000"/> </bean> <bean id="single.connection.factory.7" class="org.springframework.jms.connection.singleconnectionfactory"> <property name="targetconnectionfactory"> <ref bean="internaljmsqueueconnectionfactory.7"/> </property> </bean> but started getting below exception after configuration change.
failed configure emapi: org.springframework.beans.factory.beancreationexception: error creating bean name 'senderagent.7' defined in url [file://localhost/home/qos/qosdata/config/general/emapi/spring-mq-jms-connections.xml]: cannot resolve reference bean 'jmsqueuetemplate.7' while setting bean property 'jmstemplate'; nested exception org.springframework.beans.factory.beancreationexception: error creating bean name 'jmsqueuetemplate.7' defined in url [file://localhost/home/qos/qosdata/config/general/emapi/spring-mq-jms-connections.xml]: cannot resolve reference bean 'jmsqueueconnectionfactory.7' while setting bean property 'connectionfactory'; nested exception org.springframework.beans.factory.beancreationexception: error creating bean name 'jmsqueueconnectionfactory.7' defined in url [file://localhost/home/qos/qosdata/config/general/emapi/spring-mq-jms-connections.xml]: invocation of init method failed; nested exception java.lang.illegalargumentexception: property 'destination' or 'destinationname' required @ org.springframework.beans.factory.support.beandefinitionvalueresolver.resolvereference(beandefinitionvalueresolver.java:275) @ org.springframework.beans.factory.support.beandefinitionvalueresolver.resolvevalueifnecessary(beandefinitionvalueresolver.java:104) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.applypropertyvalues(abstractautowirecapablebeanfactory.java:1244) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.populatebean(abstractautowirecapablebeanfactory.java:1008) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory.docreatebean(abstractautowirecapablebeanfactory.java:470) @ org.springframework.beans.factory.support.abstractautowirecapablebeanfactory$1.run(abstractautowirecapablebeanfactory.java:409) @ java.security.accesscontroller.doprivileged(native method) it says 'destination' or 'destinationname' required, dealing legacy code, not sure or doing right thing when changed configuration.
please suggest if there better way reconnect openmq application when broker connection goes down due exception or when restarted. looked @ spring jms connection factory exception listener, couldnt figure out.
a defaultmessagelistenercontainer listener container (used receive messages broker), not connection factory.
if using vehicle reconnect, needs dummy queue "listen" to.
edit: updated in response comment below.
consider using spring integration; can configured automatically fail over; like
<int:gateway service interface="foo.bar" default-request-channel="foo" /> <int:channel id="foo"> <int:dispatcher load-balancer="false"/> <int:channel/> <int-jms:outbound-channel-adapter channel="foo" order="1" ... /> <int-file:outbound-channel-adapter channel="foo" order="2" mode="append" ... /> by default, dispatcher load balance (round robin) 2 adapters turning off load balancing send jms , fail on file.
spring integration has lots of features error handling, adding retry advice adapter etc, etc.
if don't want use spring integration, can like...
try { this.jmstemplate.send(...); } catch (exception e) { writetofile(...); }
Comments
Post a Comment