如何使用MVC在mqtt中获取订阅消息

本文关键字:获取 消息 mqtt 何使用 MVC | 更新日期: 2023-09-27 18:09:50

我尝试在mvc中mqtt发布和订阅代码,

我可以使用下面的代码发布消息。

string MQTT_BROKER_ADDRESS = "212.72.74.21";
MqttClient client = new MqttClient(MQTT_BROKER_ADDRESS);
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
string strValue = "Message to be Send";
client.Publish("Topic", Encoding.UTF8.GetBytes(strValue));

消息被发布。

但是当我要订阅一条消息时,我无法获得它。

我使用了以下代码:

MqttClient client = new MqttClient("212.72.74.21");

client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
string clientId = Guid.NewGuid().ToString();
client.Connect(clientId);
client.Subscribe(new string[] { "Message1" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });

订阅的消息必须按以下方法处理。

static  void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
    //Handle Message recieved        
}

但是我的问题是程序没有进入订阅函数。

如何解决?

请给我一些建议来纠正我的问题。

如何使用MVC在mqtt中获取订阅消息

您使用的订阅主题与您要发布的主题不同。确保两个主题相同。

将下面一行改为:

client.Publish("myTopic", Encoding.UTF8.GetBytes(strValue));

和下面一行到:

client.Subscribe(new string[] { "myTopic" }, new byte[] { MqttMsgBase.QOS_LEVEL_EXACTLY_ONCE });

在您的委托中,打印出一些有用的信息来通知您已收到消息,例如:

static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
{
    Console.WriteLine("Message received.");        
}