当 MQTTnet 服务器未运行时,PublishAsync 不会失败

kud*_*ger 2 c# mqtt

我正在使用 MQTTNet,这是一个 .NET 库,用于基于以下链接的 MQTT 通信

https://github.com/chkr1011/MQTTnet

我正在使用managed MQTT Client下面的链接

https://github.com/chkr1011/MQTTnet/wiki/ManagedClient

我有以下代码来publish发送消息MQTT server

 var messagePayload = new MqttApplicationMessageBuilder()
                                      .WithTopic("Topic1")
                                      .WithPayload(message)
                                      .WithExactlyOnceQoS()
                                      .WithRetainFlag()
                                      .Build();

    try
    {
          await mqttClient.PublishAsync(messagePayload);                  
    }
    catch (Exception ex)
    {
         //Why I am not getting exception? 
    }
Run Code Online (Sandbox Code Playgroud)

IUn*_*own 5

此行为是 MQTT 托管客户端设计的。它使用内部队列。所有发布的消息都会添加到此队列中,然后在服务器可用时发送到服务器。它还确保消息不会丢失,并且即使应用程序重新启动也可以重新发送。引用自项目 wiki。

所有 MQTT 应用程序消息都会添加到内部队列中,并在服务器可用时进行处理。可以存储所有 MQTT 应用程序消息,以支持在应用程序重新启动后发送它们

  • 另一种选择是使用 ManagedMqttClient 类的 ApplicationMessageProcessed 事件等待处理成功,以向客户端发出消息已处理的信号。 (3认同)
  • 在这种情况下,我们如何向客户端发送消息发送状态呢?永远都会成功!如果消息到达或未到达,我是否必须查询终端系统? (2认同)