使用RabbitMQ(或pub / sub)获取变量

时间:2018-08-29 11:34:10

标签: rabbitmq publish-subscribe

我有一个事件(例如活动),它在给定时间可能是活跃的,也可能不是活跃的。我正在寻找一种使用RabbitMQ来确定事件是否处于活动状态的方法。我知道RabbitMQ的用例是pub / sub。我如何使用RabbitMQ来判断某个事件当前是否处于活动状态。更像是实时更新的变量。我知道我可以使用Firebase数据库实现这一目标;但是有什么办法可以使用RabbitMQ做到这一点吗?如果不是RabbitMQ,还有其他建议吗?我不能使用mySQL等,因为那不是实时的。

2 个答案:

答案 0 :(得分:0)

使用RabbitMQ做到这一点的一种方法-尽管很奇怪-使用过期/自动删除队列作为记录。

您可以使用expires选项声明队列,这意味着在闲置x毫秒后将其删除。然后,您可以简单地检查队列是否存在。如果存在,则事件处于活动状态,如果不存在,则事件处于活动状态。

如果事件的活动状态/非活动状态更加动态,您还可以仅使用autoDelete选项创建队列,并将一些虚假的使用者挂接到它们。只要使用者存在,队列就会一直存在,因此删除队列只需停止使用者即可。

我希望答案是合理的。

答案 1 :(得分:0)

RabbitMQ是消息代理,它不适合表示跨分布式系统的状态。

为此,我建议使用任何提供事务处理(SQL或NoSQL)的存储解决方案,因为您真正要确保的是原子设置数据。

Redis,MongoDB,PostgreSQL之类的解决方案都可以满足您的需求。如今,云提供商可以提供与托管服务类似的解决方案。

如果访问状态时的延迟对于您的应用程序至关重要(如果这就是“实时”的意思),那么您将需要仔细考虑您的体系结构。由于状态将存储在远程位置(RabbitMQ,Redis或其他任何位置)中,因此网络延迟及其(非)可靠性将是最重要的因素。