使用连接到 Websphere MQ v7.1 的 Spring Integration 自己的 JMS 出站通道适配器:
<!-- plugging xyz channel into a JMS xyzQueue -->
<channel id="xyzChannel"/>
<jms:outbound-channel-adapter channel="xyzChannel"
destination="xyzQueue"/>
<!-- will listen on all packets matched, and forward them to a xyzChannel -->
<beans:bean id="xyzSender" class="com.custom.XyzSender">
<beans:constructor-arg name="messageChannel" ref="xyzChannel"/>
</beans:bean>
如果 MQ 代理(它的通道)在一秒钟内出现故障,则会记录异常:
Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2537;AMQ9558: The remote channel 'XYZ_CHANNEL' is not currently available ('MQRC_CHANNEL_NOT_AVAILABLE').
从 MQ 文档中,这些是导致此错误的可能原因:
- 通道当前处于停止状态。
- 通道已被通道出口停止。
- 队列管理器已达到来自此客户端的此通道的最大允许限制。
- 队列管理器已达到此通道的最大允许限制。
- 队列管理器已达到所有通道的最大允许限制。
然而 Spring Integration 似乎把它吃掉了,在 MQ 通道再次可用后的一瞬间,其他消息被处理,因为什么也没发生。当然,它会导致消息丢失,这不是预期的情况。
处理此异常的方法是什么?上似乎没有错误通道属性jms:outbound-channel-adapter
。