2017-07-11 8 views
0

私はこの方法のように春とJMSコンポーネントを設定します。Came jmsComponent:違いは何ですか?異なるBeanのListener?

<bean id="jmsConnectionFactory" 
     class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="tcp://localhost:61616" /> 
</bean> 
<bean id="cachedConnectionFactory" 
     class="org.springframework.jms.connection.CachingConnectionFactory"> 
    <property name="targetConnectionFactory" ref="jmsConnectionFactory"/> 
    <property name="sessionCacheSize" value="10"/> 
    <property name="exceptionListener" ref="exceptionListener"/> 
</bean> 
<bean id="jmsConfig" 
     class="org.apache.camel.component.jms.JmsConfiguration"> 
    <property name="connectionFactory" ref="cachedConnectionFactory"/> 
    <property name="concurrentConsumers" value="10"/> 

</bean> 

私はすべてのこれらの4つの豆のExceptionListenerプロパティを持っていることに気づきます。ですから、別のBeanのexceptionListenerの設定の違いは何ですか?

私のテストでは、CachingConnectionFactoryの設定だけが動作し、ExceptionListenerに入ることができますが、他の場合は例外がログされますが、私のコードに入ることはできません。

WARN CachingConnectionFactory.onException(322) - Encountered a JMSException - resetting the underlying JMS Connection 
javax.jms.JMSException: java.io.EOFException 
    at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:54) 
    at org.apache.activemq.ActiveMQConnection.onAsyncException(ActiveMQConnection.java:1983) 
    at org.apache.activemq.ActiveMQConnection.onException(ActiveMQConnection.java:2002) 
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) 
    at org.apache.activemq.transport.ResponseCorrelator.onException(ResponseCorrelator.java:126) 
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) 
    at org.apache.activemq.transport.TransportFilter.onException(TransportFilter.java:101) 
    at org.apache.activemq.transport.WireFormatNegotiator.onException(WireFormatNegotiator.java:160) 
    at org.apache.activemq.transport.AbstractInactivityMonitor.onException(AbstractInactivityMonitor.java:314) 
    at org.apache.activemq.transport.TransportSupport.onException(TransportSupport.java:96) 
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:200) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.EOFException 
    at java.io.DataInputStream.readInt(DataInputStream.java:392) 
    at org.apache.activemq.openwire.OpenWireFormat.unmarshal(OpenWireFormat.java:275) 
    at org.apache.activemq.transport.tcp.TcpTransport.readCommand(TcpTransport.java:221) 
    at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:213) 
    at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:196) 
    ... 1 more 

これがどのように機能するか分かりません。説明やヒントを教えてください。

答えて

0

org.apache.activemq.ActiveMQConnectionFactory.exceptionListenerに設定します。これは同じです。

org.apache.camel.component.jms.JmsConfiguration.exceptionListener登録メッセージリスナまたは呼び出しインフラストラクチャによって投げたJMSException の場合に通知するようにJMSのExceptionListenerを設定org.springframework.jms.listener.AbstractMessageListenerContainer.exceptionListener

を設定します。

だから、どんなレベルであってもリスナーとほぼ同じですが、スプリングコンテナで管理するレベルはorg.apache.camel.component.jms.JmsConfiguration.exceptionListenerに設定する方がよいでしょう。

関連する問題