虽然适配器设置为事务处理模式并且配置了RuntimeException的自定义异常类型路由器,但我已经丢失了 jms:message-driven-channel-adapter 的 spring 集成管道流中的JMS消息(文件),这意味着在任何运行时异常(如PermGenError)的情况下它将消费消息,但在我的情况下不会发生 .

任何帮助都会被激活 . .

从ibm mq获取jms消息,并在转换后将其发送到另一个队列 .

<bean id="queueTradeIn" class="com.ibm.mq.jms.MQQueue">
    <constructor-arg value="${queue.name}" />
</bean>

<jms:message-driven-channel-adapter concurrent-consumers="1" id="tradeInputQueueAdaptor" destination="queueTradeIn" channel="topLevelErrorHandlerInputChannel" acknowledge="transacted" />

异常配置:我通过 topLevelErrorHandlerInputChannel 传递所有消息 .

<!-- The ErrorHandler passes the message on the input channel to the output channel. -->
<beans:bean id="topLevelErrorHandler" class="com.xxx.ErrorHandler" >
    <beans:property name="errorChannel" ref="errorChannel"/>
    <beans:property name="outputChannel" ref="dataProcessChain"/>
    <beans:property name="throwablesToHandle" >
        <beans:list>
            <beans:value>java.lang.NullPointerException</beans:value>
            <beans:value>org.xml.sax.SAXParseException</beans:value>
            <beans:value>org.dom4j.DocumentException</beans:value>
            <beans:value>com.xxx.DLQMessageException</beans:value>
            <beans:value>java.lang.RuntimeException</beans:value>
        </beans:list>
    </beans:property>
</beans:bean>

<service-activator input-channel="topLevelErrorHandlerInputChannel" ref="topLevelErrorHandler" method="passThrough"/>
<transformer input-channel="errorChannel" method="display" ref="errorMessageConstructor" output-channel="errorLogChannel"/>

<logging-channel-adapter channel="errorLogChannel" id="rejectedLog" expression="'Message passed through!'" level="INFO"/>