Java Websphere MQ:谁应该管理回退队列

Java Websphere MQ:谁应该管理回退队列,java,ibm-mq,backout,Java,Ibm Mq,Backout,假设我的配置详细信息是: 1个PubSub,用于将消息发布到MQ主题 2个不同的应用程序 每个消费者订阅1个主题 每个订阅1个队列 最后,每个队列有一个回退队列 谁应该管理回退队列内容并确定应该重新发布哪些内容?您首先需要了解的是:为什么消息最终会出现在回退队列中 1) 是JMS客户机因为消息的格式无效而退出消息吗 2) 消费者应用程序是否由于应用程序中的错误而回滚消息 如果问题是上面的#1,则需要查看生产者应用程序并确定消息格式无效的原因。如果是#2,则需要查看应用程序逻辑 最后,您需要有

假设我的配置详细信息是:

  • 1个PubSub,用于将消息发布到MQ主题
  • 2个不同的应用程序
  • 每个消费者订阅1个主题
  • 每个订阅1个队列
  • 最后,每个队列有一个回退队列

谁应该管理回退队列内容并确定应该重新发布哪些内容?

您首先需要了解的是:为什么消息最终会出现在回退队列中

1) 是JMS客户机因为消息的格式无效而退出消息吗

2) 消费者应用程序是否由于应用程序中的错误而回滚消息

如果问题是上面的#1,则需要查看生产者应用程序并确定消息格式无效的原因。如果是#2,则需要查看应用程序逻辑


最后,您需要有一个应用程序来查看退出队列,并采取适当的纠正措施将消息放回订阅队列。

拥有退出队列的应用程序应始终管理退出队列。虽然这在一般情况下是正确的,但在发布/订阅的情况下尤其如此,因为发布者不可能知道所有订阅者是谁,也不可能在整个MQ estate中管理他们的退出队列

反对这一点的一个论点是,特定的应用程序设计确实事先知道消息的接收者。我的回答是,这描述了一个分发列表,而不是pub/sub,它是专门为将发布者与订阅者分离而设计的

您描述的实现的另一种替代方法是对所有订阅使用公共回退队列。创建一个模型队列,指定预期的公共回退队列,并在主题对象中指定该模型。然后,新订阅会自动将回退消息路由到公共回退队列。然后,中央进程或发布者可以管理已备份的消息

请注意,此实现仍然遵循我的建议,即拥有回退队列的应用程序应始终管理回退队列,因为在这种情况下,管理回退消息的应用程序拥有该队列