我从WebSPhere MQ队列收到消息。我尝试处理,如果收到一些异常,我想将消息回滚到MQ队列。如果消息在MQ中回滚会发生什么情况?
我在做同样的事情上没有问题。信息会发生什么?它是否进入队列底部?
如果我尝试从队列中拉出消息,我会收到同样的消息,我回滚?
可能是什么行为?我想通常在高容量队列场景中知道这种行为?
欣赏任何输入。
感谢, Manglu
我从WebSPhere MQ队列收到消息。我尝试处理,如果收到一些异常,我想将消息回滚到MQ队列。如果消息在MQ中回滚会发生什么情况?
我在做同样的事情上没有问题。信息会发生什么?它是否进入队列底部?
如果我尝试从队列中拉出消息,我会收到同样的消息,我回滚?
可能是什么行为?我想通常在高容量队列场景中知道这种行为?
欣赏任何输入。
感谢, Manglu
如果你在一个事务的范围内做队列操作,并发生回滚,事务解析队列和信息出现正如它的事务开始之前再经过。换句话说,根本没有改变。
但是,在大容量场景中,通常在单个队列上具有多个事务读取器和写入器,并且不会为每个出列队列或队列锁定整个队列。
这些读者和作者将在注定的事务解决时将事件插入队列中,或事务性地从队列中取出队列。在这种情况下,其他队列项目可能会出现或消失(或两者)。
如果在原始事务回滚之后,您再次从队列中退出,您可能会收到原始消息,但您可能不会。在高容量,高并发的情况下,其他读者有可能在您的代码执行之前拉取消息。
回滚将消息留在队列中,并将其放回以重新传送。
但是,当达到(可配置的)重新传送尝试的限制时,该消息被放在“死信队列”上。
发生这种情况的典型例子是s.c. '有害信息':由于基本和非暂时性问题(如格式无效,缺少字段等)而无法处理的信息。
因此,在回滚(并将消息放回队列中)之前,请务必考虑错误是否是暂时的(例如连接到后端的连接断开)。
在后一种情况下,最好吞下消息并记录错误或触发其他警报。否则,该消息将不必要地消耗处理能力和队列基础设施。
HTH
盖伊
要回答几个具体要点从这个线程...
马克, 我的理解是达到回来了门槛之后,mesage发送到背出队列,而不是死信队列。只有当消息不能写入BOQ时才发送给DLQ。 Manglu – Manglu 2009-06-23 03:33:26