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());
如果有,可以将其注释或者删除,避免服务端订阅该主题。
希望以上解决方案可以帮助你解决问题。
不知道你这个问题是否已经解决, 如果还没有解决的话:var message = new MqttApplicationMessage
{
Topic = topic,
Payload = Encoding.UTF8.GetBytes(payload),
QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce,
Retain = true
};
await mqttClient.PublishAsync(message, CancellationToken.None);