JMS:如何将DLQ中的消息重新发送给主题订阅者?

时间:2012-10-11 15:38:30

标签: java java-ee glassfish jms messaging

我不明白在使用JMS主题时如何处理错误消息。我有一个持久的JMS主题,有4个订阅者。我向主题发送了一条消息。 3个订户成功使用消息,其中一个失败。在一些重试之后,消息被放入死信队列(DLQ)。

问题是,如何从那里继续。

  1. 如何找出哪个订阅者失败?

  2. 如何仅向该订阅者重新发送消息?我不能再将它放入主题,因为所有订阅者都会得到它。

  3. 是否有一些最佳做法来处理这种情况?

    如果重要,我将Glassfish 3.1.2与openMQ一起使用。我更愿意使用一种不是特定于消息传递提供程序实现的解决方案。

    提前感谢您的回答。 干杯 ·阿尔

1 个答案:

答案 0 :(得分:1)

嗯,我对openmq不是很熟悉,但是很多jms提供商都能够将消息从主题转发到队列。因此,消息生产者将消息发送到主题,然后jms提供者将消息的单独副本转发到每个消费者的单独队列。每个消费者都有自己的DLQ。

有以下好处:

  1. 保证每个队列使用者的SLA(例如,慢速消费者可以减慢其他消费者的速度,以防单独的队列不是这样)。
  2. 没有消费者会丢失消息(持久订阅的主题在您首次订阅此主题后只会传递消息)。
  3. 群集的一些问题可以轻松解决(群集环境中的主题订阅者(MDB)作为规则将接收消息的次数与群集中的节点数一样多)