窥视开源排队解决方案,标记为已完成然后删除

时间:2010-04-30 21:59:22

标签: queue activemq rabbitmq hornetq

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

  1. 查看来自队列的消息(应该将消息标记为队列中不可见,以便其他消费者不能使用相同的消息)
  2. 消费者处理所消息的消息,如果能够成功完成工作,它会将消息标记为已消耗,并将其从队列中永久删除。
  3. 如果消费者在将消息标记为已消耗后突然死亡,或者在特定超时后未能确认消费成功,消息将再次显示在队列中,以便其他消费者可以将其提取。
  4. 我一直在关注RabbitMQ,hornetQ,ActiveMQ,但我不确定我是否可以开箱即用这个功能,系统上的任何建议都能给我这个功能?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

对不起,刚刚意识到这个帖子已经有一年多了。好吧,也许这会帮助别人...

答案 2 :(得分:1)

您要求的是标准的JMS行为 - 任何兼容的JMS实现都可以直接实现。

答案 3 :(得分:0)

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

在其中许多设计中,设计都依赖于重要的技术。

考虑到这一点,我可能会选择从RabbitMQ开始,如果需要可能会加强它。

在很多方面,了解AMQP是一件令人头疼的事,但值得花时间,我相信它会让你做到这一点。

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