0

我们使用 MQTT 协议通过 VerneMQ 服务器发布和订阅消息

任何人都可以在 VerneMQ 中提供帮助吗?我们可以像 Kafka 一样进行队列流式处理,如果订阅者离线,然后它又回到在线,那么它将能够获取他在离线时错过的所有旧的错过消息

如果 VerneMQ 不支持流式消息,那么除了 Kafka 之外我们还有哪些选择,哪些是好的

用户案例

这假设我有 3(A、B 和 C)客户由于某种原因订阅了相同的主题,我的 A 客户是办公室,同时发布者发布 100 条消息,而 A 是办公室,但 B 和 C 能够接收消息,所以如果 A 会重新上线后,他能否获得发布者在离线时发布的那 100 条消息

4

1 回答 1

1

MQTT 不是消息队列,它是一个发布/订阅系统。

但是你可以得到接近你描述的东西。使用高订阅者 QOS(1 或 2),您可以让代理为离线的客户端排队消息,直到它重新连接。

为此,您必须执行以下操作:

  • 为客户端使用固定的客户端 ID
  • 确保客户端重新连接到代理时将 Clean Session 标志设置为 false。
  • 当客户端订阅主题时,它必须包含一个大于 0 的 QOS(使用 1 可能会导致某些消息被多次传递,2 应该只有一次)

客户端离线时发布的所有消息都将被传递,无法从客户端获取任何窗口。根据代理的不同,可以对代理存储的内容设置字节限制或时间限制(但这超出了 MQTT 规范,这意味着数据应该永远存储)。(从 MQTT v5 开始,消息的发布者可以设置 TTL 值,该值将在消息过期时删除)

于 2019-09-20T09:02:32.600 回答