消息驱动通道适配器:从队列中轮询 false/phantom 条消息
message-driven-channel-adapter: Polling false/phantom messages from queue
我们正在使用 spring 集成,每天在我们的日志中我们都可以在堆栈跟踪下方看到。其他 JMS 适配器工作正常,我们认为只有下面一个缺少某些东西:
Spring集成配置:
<jms:message-driven-channel-adapter concurrent-consumers="1" id="jmsInLOAN" destination="queueLOAN" channel="LOANCommonDataChannel" acknowledge="transacted" />
请在下面查看 MQ 统计的 Put 和 Msgs 读取计数,应该有适配器读取的 Message 的准确计数。我担心 spring 集成的消息驱动通道适配器从队列中读取额外的消息。任何帮助将不胜感激。
WARN 07/Jan/2016 09:04:15,438 [org.springframework.jms.listener.DefaultMessageListenerContainer#23-1] springframework.jms.listener.DefaultMessageListenerContainer - [SYSTEM_ID=HBUSLOANIQ] [MESSAGE_ID=null] Execution of JMS message listener failed, and no ErrorHandler has been set.
org.springframework.integration.MessagingException: unsupported payload type [com.ibm.jms.JMSMessage]
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToDocument(DefaultXmlPayloadConverter.java:76)
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToNode(DefaultXmlPayloadConverter.java:88)
at org.springframework.integration.xml.router.XPathRouter.getChannelIdentifiers(XPathRouter.java:119)
at org.springframework.integration.router.AbstractMessageRouter.determineTargetChannels(AbstractMessageRouter.java:247)
at org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:211)
您似乎正在将未转换的 JMS 消息 (com.ibm.jms.JMSMessage
) 传递给 XML 有效负载转换器...
org.springframework.integration.MessagingException: unsupported payload type [com.ibm.jms.JMSMessage]
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToDocument(DefaultXmlPayloadConverter.java:76)
也许您已将 extract-payload
设置为 false
?
虽然它不在您显示的配置中。
打开 DEBUG 日志记录将显示通过系统的消息的负载类型。
问题是因为我们进入队列的有效和有毒消息(其负载类型为 [com.ibm.jms.JMSMessage])。有效消息处理得很好,但有毒消息无法被应用程序消化并发送到 BackoutQueue。
在我们的例子中,BOQ 阈值为 3,这意味着我的应用程序将尝试使用特定消息 3 次,如果消息回退 3 次,那么它将被移至 BOQ 队列并且(消息读取 - 消息放置)/ 3 on LOAIQ == 以该采样间隔放入 BOQ 队列的消息。从放入 BOQ 队列的消息中,我们可以看到有多少消息从 LOAIQ 队列中退出。这就是为什么消息读取计数大于接收到的消息计数。
我们正在使用 spring 集成,每天在我们的日志中我们都可以在堆栈跟踪下方看到。其他 JMS 适配器工作正常,我们认为只有下面一个缺少某些东西:
Spring集成配置:
<jms:message-driven-channel-adapter concurrent-consumers="1" id="jmsInLOAN" destination="queueLOAN" channel="LOANCommonDataChannel" acknowledge="transacted" />
请在下面查看 MQ 统计的 Put 和 Msgs 读取计数,应该有适配器读取的 Message 的准确计数。我担心 spring 集成的消息驱动通道适配器从队列中读取额外的消息。任何帮助将不胜感激。
WARN 07/Jan/2016 09:04:15,438 [org.springframework.jms.listener.DefaultMessageListenerContainer#23-1] springframework.jms.listener.DefaultMessageListenerContainer - [SYSTEM_ID=HBUSLOANIQ] [MESSAGE_ID=null] Execution of JMS message listener failed, and no ErrorHandler has been set.
org.springframework.integration.MessagingException: unsupported payload type [com.ibm.jms.JMSMessage]
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToDocument(DefaultXmlPayloadConverter.java:76)
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToNode(DefaultXmlPayloadConverter.java:88)
at org.springframework.integration.xml.router.XPathRouter.getChannelIdentifiers(XPathRouter.java:119)
at org.springframework.integration.router.AbstractMessageRouter.determineTargetChannels(AbstractMessageRouter.java:247)
at org.springframework.integration.router.AbstractMessageRouter.handleMessageInternal(AbstractMessageRouter.java:211)
您似乎正在将未转换的 JMS 消息 (com.ibm.jms.JMSMessage
) 传递给 XML 有效负载转换器...
org.springframework.integration.MessagingException: unsupported payload type [com.ibm.jms.JMSMessage]
at org.springframework.integration.xml.DefaultXmlPayloadConverter.convertToDocument(DefaultXmlPayloadConverter.java:76)
也许您已将 extract-payload
设置为 false
?
虽然它不在您显示的配置中。
打开 DEBUG 日志记录将显示通过系统的消息的负载类型。
问题是因为我们进入队列的有效和有毒消息(其负载类型为 [com.ibm.jms.JMSMessage])。有效消息处理得很好,但有毒消息无法被应用程序消化并发送到 BackoutQueue。
在我们的例子中,BOQ 阈值为 3,这意味着我的应用程序将尝试使用特定消息 3 次,如果消息回退 3 次,那么它将被移至 BOQ 队列并且(消息读取 - 消息放置)/ 3 on LOAIQ == 以该采样间隔放入 BOQ 队列的消息。从放入 BOQ 队列的消息中,我们可以看到有多少消息从 LOAIQ 队列中退出。这就是为什么消息读取计数大于接收到的消息计数。