跟踪聊天系统中的消息

Tracking messages in chat system

我们在 Node.JS 中构建了一个聊天系统。我们有三个传递消息的渠道,一个使用 mqtt 协议,第二个使用第三方服务推送器渠道,第三个消息获取服务基于 gcm 收到。一旦消息从一个用户发送到第二个用户,它就会存储在 redis 中,直到它传递给第二个用户。 我们面临的问题是我们无法追踪未送达的丢失消息 知道我们如何跟踪聊天中的消息吗?

我们尝试了 ack 条来自客户端的消息。但有时由于 api 故障等原因,我们无法获得 acks too.Due,我们无法跟踪消息。

我还研究了消息系统,其中一些使用基于队列的消息代理。我正在考虑为此目的使用 rabbit mq。谁能解释一下天气消息代理将使消息传递更加清晰?

也许(除非特定情况)pub/sub 可能不是您在这里需要的正确工具 pub/sub (mqtt) 在这种情况下的问题是这是一个广播发布,这意味着您只是为订阅该主题的任何人发布消息。 Pub/Sub 有一种叫做服务质量 (QoS) 的东西,它有 3 个级别,其中,代理处理此消息的行为将取决于您想要的交付的可靠性:

QoS 是:

  • 最多一次 (0)
  • 至少一次 (1)
  • 恰好一次 (2)

QoS 级别 2 可能是您需要的级别,在该级别中将重试消息直到将其传递给接收方,因此如果它(接收方)不可用,代理将继续尝试传递消息,但问题是QoS lvl 2 并非在所有 pub/sub 服务上都可用(我认为 Redis 没有它,至少我知道)......其次,您需要知道谁是所有接收者才能按顺序建立此 QoS 级别。

您可以在此处找到有关 QoS 的更多详细信息: https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/

我认为这个项目所需的最好(也许最简单)的工具是

  1. 用于使用 UUID 和 时间戳。
  2. Web 套接字通知所有连接的客户端关于新的 消息。这也将是传递新来的渠道 消息(也可以用来获取旧消息,但取决于 需求水平)。
  3. 用于在聊天服务器不可用时保存消息的本地存储。

就是这样。

使用 pub/sub 服务可能看起来更简单,因为它处理接收、管理和传递消息的复杂性,但它们更多地设计为与传入的客户端分离并且在不知不觉中外出。