3

我正在寻找允许我执行以下操作的开源队列平台:我有多个生产者,多个消费者将数据放入具有特定用例的多线程环境中的队列中:我希望消费者能够执行以下操作

  1. 查看队列中的消息(应在队列中将消息标记为不可见,以便其他消费者无法使用相同的消息)
  2. 消费者处理消费的消息,如果它能够成功完成工作,它会将消息标记为已消费,这应该将其从队列中永久删除。
  3. 如果消费者在将消息标记为已消费后突然死亡或在一定超时后未能确认成功消费,则该消息将再次在队列中可见,以便另一个消费者可以拾取它。

我一直在研究 RabbitMQ、hornetQ、ActiveMQ,但我不确定我是否可以开箱即用地获得这个功能,有什么建议可以提供给我这个功能的系统吗?

4

4 回答 4

2

RabbitMQ 开箱即用,除了基于超时的重新传递。如果在未确认消息时断开连接,则消息将重新排队以传递给队列的其他消费者。您可以使用拉模式(“Basic.Get”)或推送模式/订阅模式(“Basic.Consume”)让服务器为您提供消息。

于 2010-05-03T07:15:02.517 回答
2

这就是 hornetq 在自动确认模式下的工作方式。这不是真正的“偷看”,而是将消息传递给侦听器,并且对任何其他侦听器都不可见。如果侦听器由于死亡、抛出异常等而未能完成事务,则消息会重新出现在队列中并重新传递给另一个侦听器。如果侦听器成功完成,则消息将从队列中永久删除。

对不起,刚刚意识到这个线程已经超过一年了。好吧,也许这会对某人有所帮助...

于 2011-07-22T03:17:20.897 回答
1

您要求的是标准 JMS 行为——任何兼容的 JMS 实现都可以开箱即用地实现它。

于 2010-05-02T11:02:46.573 回答
0

作为介绍,我可以说我从头开始构建和设计了许多基于消息的系统,使用了许多技术,包括 CORBA、COM 和本地套接字。

在其中许多中,重要的是基于技术的设计。

考虑到这一点,我可能会选择从RabbitMQ开始,并在需要时对其进行增强。

从很多方面来说,理解AMQP是一件令人头疼的事是一件令人头疼的事情,但值得花时间,我相信它会让你完成这项工作。

即使您无法获得开箱即用的确切功能,重要的问题是您能否做到这一点,我相信我可以做到。毕竟是开源的。

于 2010-04-30T22:34:35.217 回答