mqtt.net确保回复主题只接收一次

1.MQTT在订阅回复的消息主题时,只要请示过一次,回复主题就一直在接收
2.确认主题只回复了一次
3.回复时用WithRetainFlag(false)时,要发很多次才收到一次
4.确认mqtt接收服务端分别只收到了一次发送请示和回复主题
5.即使在获取到回复时,取消订阅,仍会继续收到该主题

怎样确保回复主题只接收一次呢?目前情况貌似请示端一直自己的触发接收.
一.请示数据时,发送主题

var message = new MqttApplicationMessageBuilder()
                      .WithTopic(MQTTHelper.GetPubTopic(clientIP))
                      .WithPayload(clientIP)
                      .WithAtMostOnceQoS()
                      //.WithAtLeastOnceQoS()
                      .WithRetainFlag()
                      .Build();
          mqttClient.PublishAsync(message);

二.回复数据时,发送主题

 var message = new MqttApplicationMessageBuilder()
                      .WithTopic(MQTTHelper.GetPubTopic(device.PC_IPAddr))
                      .WithPayload(JsonConvert.SerializeObject(Data))
                      //.WithAtMostOnceQoS()
                      .WithExactlyOnceQoS()
                      //.WithAtLeastOnceQoS()
                      .WithRetainFlag()//设为false时,很容易出现收不到的情况 
                      .Build();
mqttClient.PublishAsync(message);

三、mqtt服务端

private static void Server_ApplicationMessageReceived(MqttApplicationMessageReceivedEventArgs e)
        {
          
            var topic = e.ApplicationMessage.Topic;//确认mqtt服务端只回复了一次
}

引用 皆我百晓生 小程序回复内容作答:
要确保回复主题只接收一次,可以在订阅回复消息的时候使用QoS为1(AtLeastOnce)或2(ExactlyOnce)。这样,在发布回复消息的时候,可以设置WithAtLeastOnceQoS()或WithExactlyOnceQoS(),确保消息的可靠传输。同时,为了避免重复接收,可以在订阅回复消息的时候,使用MqttClientUnsubscribeResult unsubscribeResult = await mqttClient.UnsubscribeAsync(topic),取消订阅该主题。这样,回复消息只会被接收一次。

知道原因了,是分配了同样的连接ID造成