【问题标题】:Using RabbitMQ (or pub/sub) for variables对变量使用 RabbitMQ(或 pub/sub)
【发布时间】:2018-08-29 11:34:09
【问题描述】:

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

【问题讨论】:

  • 我不确定我是否理解这个问题。 RabbitMQ 是一个消息代理 - 它通常不是应用程序状态容器(您在寻找数据库吗?)
  • 这种设计选择背后的要求是什么?你想达到什么目的?
  • @nodafox 我希望用户(订阅者)知道活动何时实时进行。所以一种方法是每 1 秒发送一次状态。还有其他的吗?
  • @AlecSmart 你能定义一下你所说的实时是什么意思吗?像 Redis 这样的键值存储方案还不够吗?
  • 键值存储没问题。但是我如何在前端(比如 JS)实时知道该值是否已设置?

标签: rabbitmq publish-subscribe


【解决方案1】:

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

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

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

我希望答案是有意义的。

【讨论】:

    【解决方案2】:

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

    为此,我宁愿推荐任何提供事务(SQL 或 NoSQL)的存储解决方案,因为您真正想要确保数据是原子设置的。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      相关资源
      最近更新 更多