2011-03-30 85 views
0

是否有一个消息解决方案(最好支持Python),我可以使用像邮箱,例如从任何给定的队列中检索消息而不必订阅?我认为消息队列可以工作,但我必须重复订阅,从队列中获取消息,然后取消订阅,这听起来并不理想。协议检索和发布消息(消息队列没有pub/sub)

回答

1

大部分(如果不是全部)消息解决方案支持短信两种模式

  • 发布\订阅,也就是说,你需要订阅得到的消息。

  • 排队 - 一方向队列发送消息,另一方从队列中读取消息 - 不需要预订,消息在读取时消耗。

其实,标准的队列是比较常见的,然后发布订阅 - 你必须找到一个支持排队的工具更好的机会,但不是酒馆\子,然后找到支持酒馆\子但不排队的工具。

您可能正在寻找第二模式

0

有很多选择。这里有两个:

  1. 看看Redis。有两个Python客户端库(参见redis-pytxRedis)。您所描述的操作(类似邮箱的操作)可以通过在Redis的列表中执行blpop来模拟。

  2. 另一种选择是RabbitMQ。它有很多Python客户端库py-ampqlibtxAMQP。您可以通过执行basic.getbasic.ack(有关更多信息,请参阅this reference)将此视为类似邮箱的队列。

+0

是不是在模拟Redis的消息队列,或任何与此有关的数据库,一个次优解?毕竟,像RabbitMQ这样的专用消息队列已经解决了你自己模拟队列行为时必须解决的大多数问题。 – Elad 2011-03-30 07:34:55

+0

“次优”的定义是什么?那队列是如何“模拟”的?你的意思是缺乏必要的认知? – rlotun 2011-03-30 23:45:43

+0

我的意思是,最好使用现有的队列实现,可能会处理最常见的问题和边缘情况,而不是自己实现一个。 – Elad 2011-03-31 07:18:20

0

的RabbitMQ - http://www.rabbitmq.com

ZeroMQ - http://www.zeromq.org

亚马逊SQS - http://aws.amazon.com/sqs

所有这三个有Python库。 前两个是免费的。如果您不发送和接收数百万条消息,SQS成本非常低,并且具有高可用性的优点,并且无需您自己管理主机。

关于订阅和取消订阅,如果您从队列中拉取消息,而不是让队列将消息推送给您(pub/sub),那么您没有订阅和取消订阅。在上面的所有例子中,您不会承担任何开销。