我有一个事件(比如活动),可能在给定时间有效或无效。我正在寻找一种方法来使用RabbitMQ来判断事件是否有效。我知道RabbitMQ的用例是pub / sub。如何使用RabbitMQ来判断事件当前是否处于活动状态。更像是一个实时更新的变量。我知道我可以使用Firebase数据库实现这一目标;但有什么办法可以用RabbitMQ做到吗?如果不是RabbitMQ,还有其他建议吗?我不能使用mySQL等因为那不是实时的。
使用RabbitMQ可以完成的一种方法 - 尽管很奇怪 - 使用expiring / autoDelete队列作为记录。
您可以使用expires
选项断言队列,这意味着在x毫秒不使用后将其删除。然后,您只需检查队列是否存在。如果存在,则事件处于活动状态(如果事件未激活)。
如果您的事件活动/非活动状态更加动态,您还可以使用autoDelete
选项创建队列并将一些假消费者挂钩。只要消费者存在,队列就会存在,因此删除队列只需停止消费者。
我希望答案有意义。
RabbitMQ是一个消息代理,它不适合在分布式系统中表示状态。
为此,我宁愿推荐任何提供事务(SQL或NoSQL)的存储解决方案,因为您确实希望确保数据是自动设置的。
Redis,MongoDB,PostgreSQL等解决方案都能满足您的需求。如今,云提供商提供与托管服务类似的解决方案。
如果访问状态的延迟在您的应用程序中至关重要(如果这是“实时”的意思),那么您需要仔细考虑您的体系结构。由于状态将存储在远程位置(无论是RabbitMQ,Redis还是其他任何东西),网络延迟和它的(非)可靠性将是最重要的因素。