我已经写了代码,使用spring Integration JMS-Message-Message-Message-drive-Channel-radapter读取来自IBM MQ的消息,但无法从队列中读取消息。。
<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" />
上面的配置正在工作,但是当我添加日志记录适配器时失败,其持续打印警告在控制台上。
<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)
对不起延迟。因此,我想您的id="logger"
是冗余组件。问题与<integration:wire-tap>
完全与TraceChannelInterceptor
结合在一起。
我的意思是您在这里使用Spring Cloud侦探。
您是否介意为org.springframework.integration
类别共享DEBUG
,同时我试图在本地重现问题。
加上您可以从跟踪中排除componentInfologger
,以避免使用java.lang.StackOverflowError
。
我认为我们通过wire-tap
进行循环跟踪。