消息代理 - "message has been read" 确认解决方案

Message brokers - "message has been read" acknowledgment solution

我正在实施一项服务,该服务使用任意消息代理将消息分派给客户端。一个用户可能有多个客户端,消息将被分派给每个客户端。一旦用户在一个客户端上阅读了消息,我希望从用户的其他客户端上删除该消息。

消息代理通常会实现此功能,还是我需要自定义解决方案?

对于自定义解决方案,我认为代理可以维护一个单独的回复主题,客户端将向该主题发送一条消息,说明用户已阅读该消息。该服务可以使用有关此回复主题的消息,并向用户的其他客户端发送另一条消息,告诉他们删除该消息。

这样的解决方案通常是这样实施的吗?

如果有帮助,我正在考虑使用 MQTT 作为消息协议。

MQTT协议中甚至没有端到端消息传递通知的概念1,更不用说读取通知了。您可能需要自己实施。

如果我这样做,我将为每个用户设置 2 个主题,如下所示:

[用户 ID]/消息

[用户id]/阅读

我会让传送到 [用户 ID]/msg 的消息的有效负载包含一个消息 ID。然后我会在 [user id]/read 主题上发布消息 id。所有客户端都会订阅这两者,这样他们就可以轻松地将消息标记为 read/remove 消息,因为它们已被其他客户端使用。

1更高 QOS 级别的确认在发布者和代理之间,然后在代理和订阅者之间