最初に、ブローカ接続がシャットダウンされて再起動されたときにアプリケーションに再接続するように JMS MQ を構成する方法について質問があります。
以下は私が試したものです、
これは、最初に 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> -->
これを、「SingleConnectionFactory」をラップする「DefaultMessageListenerContainer」を導入した以下の構成に置き換えました。
<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>
しかし、この構成の変更後、以下の例外が発生し始めました。
Failed to configure emapi:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'senderAgent.7' defined in URL
[file://localhost/home/qos/qosdata/config/general/emapi/spring-mq-jms-connections.xml]:
Cannot resolve reference to bean 'jmsQueueTemplate.7' while setting bean property 'jmsTemplate';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'jmsQueueTemplate.7' defined in URL
[file://localhost/home/qos/qosdata/config/general/emapi/spring-mq-jms-connections.xml]:
Cannot resolve reference to bean 'jmsQueueConnectionFactory.7' while setting bean property 'connectionFactory';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with 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 is java.lang.IllegalArgumentException:
Property 'destination' or 'destinationName' is required
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:275)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:104)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1244)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1008)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:470)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
'destination' または 'destinationName' が必要であると表示されます。レガシー コードを扱っています。これを探す場所がわからないか、構成を変更したときに正しいことを行っています。
例外が原因でブローカー接続がダウンしたとき、または再起動したときに OpenMQ をアプリケーションに再接続するためのより良い方法があるかどうかを提案してください。例外リスナーを使用してSpring JMS接続ファクトリーも調べましたが、わかりませんでした。