繁体   English   中英

消息重新投递 ibm mq

[英]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 方面。

是否可以将失败的消息放到队列的后面?

您想将消息放回队列还是将有毒消息放在同一个队列的末尾? 我们不能将有害消息移到同一个队列的末尾

处理有毒消息只有三个选项:

  1. 将消息放回队列
  2. 将消息重新路由到 BOQ 或 DLQ
  3. 永久清除或丢弃它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM