请教一个MQTTNET的服务端推送问题

MQTTNET 3.1.2版本,项目引用后 创建MQTT服务,接收消息等都正常,只有推送的时候,推送内容不止是客户端接收到,服务端自己也接收到。很奇怪。

 /// <summary>
        /// 发布消息
        /// </summary>
        public async static void ServerPublishMqttTopic(string topic, string payload)
        {
            try
            {
                var message = new MqttApplicationMessage()
                {
                    Topic = topic,
                    Payload = Encoding.UTF8.GetBytes(payload),
                    QualityOfServiceLevel = MqttQualityOfServiceLevel.AtLeastOnce,
                    Retain = false,
                };
                await mqttServer.PublishAsync(message);
            }
            catch (Exception ex)
            {
                TxtWrite.WriteTxt("[" + DateTime.Now + "]发布消息失败!");
            }
        }

 

发送消息调用ServerPublishMqttTopic("xxx","0");

结果在服务端mqttServer.ApplicationMessageReceivedHandler的事件中,也接收到了“0”;自己推送自己接收了?

请问这个怎么解决啊??

该回答引用ChatGPT-3.5

根据你提供的代码,可以看出是在服务端向指定的主题发布消息,如果服务端自己也接收到了这个消息,那么可能是服务端也订阅了这个主题。


可以检查一下服务端是否订阅了这个主题,如果是的话,可以在发布消息之前取消服务端对该主题的订阅,避免服务端自己接收到该消息。


可以尝试在服务端代码中使用以下方法取消订阅:

await mqttServer.UnsubscribeAsync(topic);

其中,topic 是服务端订阅的主题名称。


如果服务端确实不需要订阅该主题,可以检查服务端代码中是否在启动 MQTT 服务时,意外地订阅了该主题。可以检查以下代码,看是否存在订阅操作:

await mqttServer.SubscribeAsync(new TopicFilterBuilder().WithTopic(topic).Build());

如果有,可以将其注释或者删除,避免服务端订阅该主题。


希望以上解决方案可以帮助你解决问题。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^