我使用Spring启动(JMS)编写了一个Websphere MQ侦听器。我已将队列级别的退出队列配置为阈值为0
作为程序的一部分,我立即抛出JMSException,我收到消息,以便我的消息返回队列。
我面临的问题是消息不断被重新传递给听众
JMSMessage class: jms_text
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 0
JMSMessageID: ID:414d51204d5148554244313020202020583e8e2b26af9905
JMSTimestamp: 1484639118180
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: true
JMSXAppID: WebSphere MQ Client for Java
JMSXDeliveryCount: 98
JMSXUserID: a450922
JMS_IBM_Character_Set: UTF-8
JMS_IBM_Encoding: 546
JMS_IBM_Format: MQSTR
JMS_IBM_MsgType: 8
JMS_IBM_PutApplType: 28
JMS_IBM_PutDate: 20170117
JMS_IBM_PutTime: 07451818
@JmsListener(destination = "${ibm.mq.incomingqueue}", containerFactory = "defaultJmsListenerContainerFactory")
public void onMessage(TextMessage message) throws JMSException {
System.out.println("Here" + message.toString());
throw new JMSException("reason");
}
答案 0 :(得分:2)
BOTHRESH必须大于或等于1
。将BOTHRESH设置为0
将禁用它。
引用IBM的How WebSphere Application Server handles poison messages Paul Titheridge。
当WebSphere MQ是JMS提供者时 缺省情况下,使用WebSphere MQ创建的队列将Backout阈值属性(在WebSphere MQ术语中称为BOTHRESH)设置为0.因此,WebSphere MQ的缺省行为永远不会退出有害消息。