【问题标题】:Message brokers - "message has been read" acknowledgment solution消息代理——“消息已读”确认解决方案
【发布时间】:2015-08-20 11:24:47
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: server message mqtt broker


    【解决方案1】:

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

    如果我这样做,每个用户会有 2 个主题,如下所示:

    [用户名]/msg

    [用户名]/读取

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

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

    【讨论】:

    • 我真的很喜欢这个想法,而且它看起来合乎逻辑,但是,所有订阅和发布到 [user id]/read 主题的客户呢?这样我就可以从我的服务器中消除更多的复杂性,并将所有这些逻辑留给代理。但是 MQTT 是否允许客户端发布和订阅同一个主题,而不接收它自己发布的关于该主题的消息?
    • 不,如果客户端订阅了某个主题,然后在同一主题上发布,则消息也会发送到该客户端
    • 我可以发誓我以前见过这样的功能。向发布它的客户端发送 thw 消息会浪费网络资源
    猜你喜欢
    • 1970-01-01
    • 2021-03-05
    • 2018-12-20
    • 2011-07-24
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2011-12-18
    • 1970-01-01
    相关资源
    最近更新 更多