MQTTNet UseApplicationMessageReceivedHandler未触发
我正在做一个POC,所以这里是快速和肮脏的代码。我使用MQTT.fx桌面客户端测试MQTT服务器的发布/订阅。很好。我可以发布/订阅我的主题。我可以从另一个mqtt客户机发布,并获得消息。使用此代码时,当我从MQTT.fx或任何其他发布者发布消息时,我不会收到任何消息。如果使用mqttClient发布(如果您取消注释该行),我将收到一些信息。我在挠头。。。 有人能帮忙吗?谢谢MQTTNet UseApplicationMessageReceivedHandler未触发,mqtt,mqttnet,Mqtt,Mqttnet,我正在做一个POC,所以这里是快速和肮脏的代码。我使用MQTT.fx桌面客户端测试MQTT服务器的发布/订阅。很好。我可以发布/订阅我的主题。我可以从另一个mqtt客户机发布,并获得消息。使用此代码时,当我从MQTT.fx或任何其他发布者发布消息时,我不会收到任何消息。如果使用mqttClient发布(如果您取消注释该行),我将收到一些信息。我在挠头。。。 有人能帮忙吗?谢谢 class Program { private static CancellationTokenSource c
class Program
{
private static CancellationTokenSource cts = new CancellationTokenSource(); //TODO create token using the Timeout delay from config
private static async Task Main(string[] args)
{
var factory = new MqttFactory();
var mqttClient = factory.CreateMqttClient();
var options = new MqttClientOptionsBuilder()
.WithClientId("MyClientIDHere")
.WithTcpServer("IPAddressHere", 1883)
//.WithCredentials("Wbo", string.Empty)
//.WithTls()
.WithCleanSession()
.Build();
try
{
mqttClient.UseApplicationMessageReceivedHandler(async e =>
{
Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###");
Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}");
Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}");
Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}");
Console.WriteLine();
});
mqttClient.UseConnectedHandler(async e =>
{
Console.WriteLine("### CONNECTED WITH SERVER ###");
// Subscribe to a topic
await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("MyClientIDHere/Device_2/Instance_1").Build());
Console.WriteLine("### SUBSCRIBED ###");
});
await mqttClient.ConnectAsync(options, cts.Token);
// UNCOMMENT AND YOU WILL RECEIVE A MESSAGE Task.Run(() => mqttClient.PublishAsync("MyClientIDHere/Device_2/Instance_1","met=Temperature~data=29"));
}
catch (OperationCanceledException)
{
Console.WriteLine("task cancelled");
}
catch (Exception e)
{
Console.WriteLine(e);
}
Console.ReadKey();
}
}
使用最新版本的MQTTnet,我无法重现您的问题,它似乎在这里起作用。我使用的是mosquitto MQTT服务器,它位于运行我的程序的另一台服务器上 你的代码看起来不错。通过在连接之前订阅主题,您可以改进一些功能