[英]Message redelivery ibm mq
我有一个从 IBM MQ 读取消息的系统。 从这个队列中,我们有时会得到损坏的数据。 如果下一次读取消息失败,则侦听器将在继续之前等待 5 分钟。 当消息失败 3 次时,它会被放入退避队列。 JMSContainerFacotry 设置为最多并行运行 10 个。 这意味着如果我们收到一大批损坏的消息,这些消息每个需要 10 分钟以上才能到达退避队列(这是可以的),但它们最终会消耗所有线程,因此其他消息必须等待所有损坏的消息到达处理前的退避队列。 我想从侦听器中删除 wait() 以便这不会阻塞线程,但是失败的消息在弹出之前仍然等待 5 分钟。
我知道使用 ActiveMQ,您可以告诉队列在再次弹出相同消息之前等待 5 分钟,而使用 IBM MQ 我没有这种可能性。 是否可以将失败的消息放到队列的后面? 现在失败的消息似乎会出现在新消息的前面。 或者将失败消息的 jmspriority 设置得更低。 那么,如果有尚未失败的消息会在那些失败的消息之前从队列中弹出?
我的听众大概是这样:
@JMSListener()
public void listen(Object message) {
TextMessage textMessage = (TextMessage) message;
if (textMessage.getIntProperty("JMSXDeliveryCount") > 1) {
//pause for 5 minutes
}
//buisness logic
}
队列中是一个 IBM MQ。 AS 是 Jboss 6。
如果收到有害消息,不确定为什么要暂停 5 分钟。 如果您知道它很糟糕,为什么不将其扔掉或将其传递给退出队列以供进一步调查? 请参阅 JMS 有害消息处理:
http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q032280_.htm
更令人担忧的是,为什么您收到这么多“坏”消息?
我知道使用 ActiveMQ,您可以告诉队列在再次弹出相同消息之前等待 5 分钟,而使用 IBM MQ 我没有这种可能性。
尝试之间的重试间隔选项需要在 MDB 侦听器端设置,因为它充当客户端。 但不是在 WMQ 方面。
是否可以将失败的消息放到队列的后面?
您想将消息放回队列还是将有毒消息放在同一个队列的末尾? 我们不能将有害消息移到同一个队列的末尾
处理有毒消息只有三个选项:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.