确保经纪人保留消息,直到至少有一个消费者获得消息

时间:2013-09-26 00:40:13

标签: java apache jms activemq messagebroker

我开始实现基于ActiveMQ的消息传递服务以将工作任务发送到各种服务器,但是我注意到在默认模式下,如果没有人“监听”生产者的主题,那么来自该生产者的任何消息都将是丢失。

即,

  • 如果生产者发送消息与实时经纪人
  • 但没有消费者可以倾听
  • 消息不在哪里

我想让Broker保留消息,直到至少有一个听众收到消息。

我正在尝试几种方法来实现这一点,但不能确定最佳/正确的方式:

  • 实施消息确认功能
  • (请注意这是我需要制作人在每个看起来非常,非常笨重和最后的消息之后等待听众...)
  • 实施会话交易
  • (我遇到这个问题,因为交易这个词在这里听起来是正确的,但我认为它更多地与生产者 - 经纪人互动有关,而不是生产者 - 消费者)

理想情况下,有一种模式可以发送一个(或一组)消息,并在发送一个布尔值后返回,说明消息是否被至少一个消费者收听。

2 个答案:

答案 0 :(得分:1)

交易和确认冲突与JMS主题的一般概念有所不同。

只需使用队列而不是主题。使用CLIENT_ACKNOWLEDGE或事务会话访问此队列。无论如何,工作人员任务只能由一个工人处理,因此队列解决了另一个问题。


如果有特殊原因要使用主题,您可以在同一主机上考虑消息驱动bean(MDB),例如JMS提供程序(例如,您可以通过使用JBoss及其集成的HornetQ来实现此目的),但这是还是不太正确。

另一种可能性是同时拥有主题和队列。后者仅用于保证每封邮件的传递。

答案 1 :(得分:0)

这实际上不是典型的消息传递模式。通常,您有一个接收器和一个持久队列或多个接收器,其中包含对主题的持久订阅。在任何一种情况下,每个接收器总是接收消息。我真的不了解“至少有一个”接收器应该接收它的用例。

是的,事务只处理客户端和代理之间的交互,而不是客户端和最终接收者之间的交互。