虽然适配器设置为事务处理模式并且配置了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"/>