2017-02-22 11 views
2

Spring Integration JMSメッセージドリブンチャネルアダプタを使用してIBM MQからメッセージを読み取るコードを作成しましたが、キューからメッセージを読み取ることができません。以下は私の設定です。設定上Spring Integration IBM MQを使用したjmsmessage-driven-channel-adapter

<beans:bean id="ibmJmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory"> 
    <beans:property name="transportType" value="1"/> 
    <beans:property name="queueManager" value="***"/> 
    <beans:property name="hostName" value="**"/> 
    <beans:property name="port" value="**" /> 
    <beans:property name="channel" value="***"/> 
</beans:bean> 


<beans:bean id="receiverQueue" class="com.ibm.mq.jms.MQQueue"> 
    <beans:constructor-arg index="0" value="****"/> 
    <beans:constructor-arg index="1" value="****"/> 
</beans:bean> 
<integration:channel id="componentInfoChannel" /> 

<jms:message-driven-channel-adapter 
     id="componentInfoAdapter" connection-factory="ibmJmsConnectionFactory" destination="receiverQueue" channel="componentInfoChannel" 
     /> 

<integration:service-activator id="componentInfoActivator" 
     input-channel="componentInfoChannel" ref="componentInfoConsumer" 
     method="componentInfoListen" /> 

私はコンソール.Detail上のアダプターの継続的印刷警告をログに記録する追加したときに作業したが失敗している以下の言及されています。

<integration:logging-channel-adapter 
     id="componentInfologger" level="INFO" /> 
    <integration:wire-tap id="componentInfoWireTap" 
     channel="componentInfologger" pattern="*" order="2" /> 
    <integration:logging-channel-adapter 
     id="logger" log-full-message="true" level="INFO" /> 

    2017-02-23 00:09:05.093 WARN [componentdatafiles,48f69e84ab395754,ebf4ae7f3b812a01,false] 90072 --- [ter.container-1] o.s.j.l.DefaultMessageListenerContainer : Execution of JMS message listener failed, and no ErrorHandler has been set. 
java.lang.StackOverflowError: null 
    at java.util.Collections$SynchronizedMap.put(Unknown Source) 
    at ch.qos.logback.classic.util.LogbackMDCAdapter.put(LogbackMDCAdapter.java:110) 
    at org.slf4j.MDC.put(MDC.java:147) 
    at org.springframework.cloud.sleuth.log.Slf4jSpanLogger.logStartedSpan(Slf4jSpanLogger.java:48) 
    at org.springframework.cloud.sleuth.trace.DefaultTracer.createChild(DefaultTracer.java:170) 
    at org.springframework.cloud.sleuth.trace.DefaultTracer.createSpan(DefaultTracer.java:72) 
    at org.springframework.cloud.sleuth.instrument.messaging.TraceChannelInterceptor.startSpan(TraceChannelInterceptor.java:98) 
    at org.springframework.cloud.sleuth.instrument.messaging.TraceChannelInterceptor.preSend(TraceChannelInterceptor.java:78) 
    at org.springframework.integration.channel.AbstractMessageChannel$ChannelInterceptorList.preSend(AbstractMessageChannel.java:538) 
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:415) 
    at org.springframework.integration.channel.interceptor.WireTap.preSend(WireTap.java:168) 
    at org.springframework.integration.channel.AbstractMessageChannel$ChannelInterceptorList.preSend(AbstractMessageChannel.java:538) 
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:415) 
    at org.springframework.integration.channel.interceptor.WireTap.preSend(WireTap.java:168) 
    at org.springframework.integration.channel.AbstractMessageChannel$ChannelInterceptorList.preSend(AbstractMessageChannel.java:538) 
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:415) 
    at org.springframework.integration.channel.interceptor.WireTap.preSend(WireTap.java:168) 
    at org.springframework.integration.channel.AbstractMessageChannel$ChannelInterceptorList.preSend(AbstractMessageChannel.java:538) 
    at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:415) 
    at org.springframework.integration.channel.interceptor.WireTap.preSend(WireTap.java:168) 
+1

詳細を教えていただけますか?症状は何ですか?問題はどのように見えるのですか?あなたの設定には何もありません。いくつかのログ、StackTraces、テストケースなどをお願いします。 –

+0

私の質問を編集してください。 –

答えて

1

遅れて申し訳ありません。だから、あなたのid="logger"は冗長コンポーネントだと思います。そして問題は正確に<integration:wire-tap>TraceChannelInterceptorとの組み合わせである。

ここで使用しているのは、Spring Cloud Sleuthです。

org.springframework.integrationカテゴリにDEBUGを共有しても問題は発生しませんが、ローカルで問題を再現しようとしています。

さらに、componentInfologgerをトレースから除外して、java.lang.StackOverflowErrorを回避することができます。

私はwire-tap経由でループを繰り返すと思います。

+0

No-op。あなたがプレイするためのシンプルなSpring Bootアプリケーションが必要です。私はすでにそれがJMSなしであるかもしれないと思います。あなたの設定に何らかの形で再帰があるように見えます... –

+0

おかげでArtemは問題を抱えていました.Id loggerとLoggerオブジェクトは、同じクラス名のComponentInfoConsumer.classを持つ2つの異なるクラスのLoggerFactoryから作成されます。決算の質問 –

関連する問題