首页 文章

message-driven-channel-adapter:轮询队列中的false / phantom消息

提问于
浏览
0

我们在日志中使用spring集成和日常工作,我们可以在下面看到stacktrace . 其他JMS适配器工作正常,我们认为只有一个以下缺少一些东西:

Spring集成配置:

<jms:message-driven-channel-adapter concurrent-consumers="1" id="jmsInLOAN" destination="queueLOAN" channel="LOANCommonDataChannel" acknowledge="transacted" />

请查看下面的Put和Msgs读取计数的MQ统计信息,应该有适配器读取的消息的确切数量 . 我担心Spring集成的消息驱动通道适配器从队列中读取额外的消息 . 任何帮助,将不胜感激 .

enter image description here

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)

2 回答

  • 0

    看起来您正在将未转换的JMS消息( com.ibm.jms.JMSMessage )传递给XML Payload转换器......

    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日志记录将显示通过系统的消息的有效负载类型 .

  • 0

    问题是因为我们进入队列的有效和有毒(它有一个有效载荷类型[com.ibm.jms.JMSMessage])消息 . 有效的消息处理得很好,但有些消息无法通过应用程序消化并发送到BackoutQueue .

    在我们的例子中,BOQ阈值是3,这意味着我的应用程序将尝试消耗一个特定消息3次,如果消息退出3次,那么它将被移动到BOQ队列并且(msgs read-msgs put)/ 3在LOAIQ == msgs以该采样间隔放入BOQ队列 . 从放置在BOQ队列上的msgs,我们可以看到有多少消息从LOAIQ队列中退出 . 这就是为什么消息读取计数超过收到的消息数量的原因 .
    enter image description here

相关问题