【发布时间】:2023-03-15 09:18:01
【问题描述】:
是否有我可以像邮箱一样使用的消息传递解决方案(最好支持 Python),例如从任何给定队列中检索消息而无需订阅?我想消息队列可以工作,但我必须反复订阅,从队列中抓取消息,然后取消订阅,这听起来不是最佳选择。
【问题讨论】:
标签: python email scalability message-queue messaging
是否有我可以像邮箱一样使用的消息传递解决方案(最好支持 Python),例如从任何给定队列中检索消息而无需订阅?我想消息队列可以工作,但我必须反复订阅,从队列中抓取消息,然后取消订阅,这听起来不是最佳选择。
【问题讨论】:
标签: python email scalability message-queue messaging
大多数(如果不是全部)消息传递解决方案支持两种消息传递模式
发布\订阅——即需要订阅才能获取消息。
排队 - 一方向队列发送消息,另一方从队列中读取消息 - 无需订阅,消息在读取时被使用。
实际上,标准队列比发布订阅更常见 - 您更有机会找到支持队列但不支持 pub\sub 的工具,然后找到支持 pub\sub 但不支持队列的工具。
您可能正在寻找第二种模式
【讨论】:
RabbitMQ - http://www.rabbitmq.com
ZeroMQ - http://www.zeromq.org
亚马逊 SQS - http://aws.amazon.com/sqs
这三个都有 python 库。 前两个是免费的。如果您不发送和接收数百万条消息,SQS 成本相当低,它具有高可用性的优势,并且您无需自己进行主机管理。
关于订阅和取消订阅,如果您从队列中拉出消息而不是让队列向您推送消息(发布/订阅),那么您就不是订阅和取消订阅。在上述所有示例中,您不会产生任何开销。
【讨论】:
有很多选择。这里有两个:
看看Redis。它有两个 Python 客户端库(参见 redis-py 和 txRedis)。您描述的操作(队列上类似邮箱的操作)可以通过在 Redis 中的列表上执行 blpop 来模拟。
另一个选项是RabbitMQ。 py-ampqlib 和 txAMQP 有很多 Python 客户端库。您可以通过执行basic.get 和basic.ack 将其视为类似邮箱的队列(有关详细信息,请参阅this reference)。
【讨论】: