C# 当MQTTnet服务器未运行时,PublishAsync不会失败
我正在使用MQTTNet,一个用于从下面链接进行基于MQTT的通信的.NET库 我正在从下面的链接使用C# 当MQTTnet服务器未运行时,PublishAsync不会失败,c#,mqtt,C#,Mqtt,我正在使用MQTTNet,一个用于从下面链接进行基于MQTT的通信的.NET库 我正在从下面的链接使用托管MQTT客户端 我有以下代码来将消息发布到MQTT服务器 var messagePayload = new MqttApplicationMessageBuilder() .WithTopic("Topic1") .WithPayloa
托管MQTT客户端
我有以下代码来将消息发布到MQTT服务器
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?
}
这种行为是通过MQTT托管客户机的设计实现的。它使用一个内部队列。在上发布的所有消息都将添加到此队列中,然后在该队列可用时发送到服务器。
它还确保消息不会丢失,即使应用程序重新启动,也可以重新发送消息。引用项目维基
一旦服务器可用,所有MQTT应用程序消息都将添加到内部队列并进行处理。
可以存储所有MQTT应用程序消息,以支持在应用程序重新启动后发送它们
这种行为是通过MQTT托管客户机的设计实现的。它使用一个内部队列。在上发布的所有消息都将添加到此队列中,然后在该队列可用时发送到服务器。
它还确保消息不会丢失,即使应用程序重新启动,也可以重新发送消息。引用项目维基
一旦服务器可用,所有MQTT应用程序消息都将添加到内部队列并进行处理。
可以存储所有MQTT应用程序消息,以支持在应用程序重新启动后发送它们
在这种情况下,我们如何向客户端发送消息传递状态?这将永远是成功!我是否必须查询终端系统是否收到了消息?在这种情况下,如果成功交付得到保证(最终一致性),我建议只向客户端返回消息确认。除非您担心服务器可用性是一种频繁且不可靠的情况。另一个选项可能是使用ManagedMQTClient类的ApplicationMessageProcessed事件等待成功处理,以向客户端发出消息已处理的信号。ApplicationMessageProcessed未触发。在这种情况下,我们如何向客户端发送消息传递状态?这将永远是成功!我是否必须查询终端系统是否收到了消息?在这种情况下,如果成功交付得到保证(最终一致性),我建议只向客户端返回消息确认。除非您担心服务器可用性是一种频繁且不可靠的情况。另一个选项可能是使用ManagedMQTClient类的ApplicationMessageProcessed事件等待成功处理,以向客户端发出消息已处理的信号。ApplicationMessageProcessed未触发。