当前位置:   article > 正文

使用MQTTnet连接MQTT服务-.NET Framework版本_c# mqttnet 4.3

c# mqttnet 4.3

        上一篇RabbitMQ 搭建MQTT服务  中,创建了admin-test 用户,并创建 test-host 虚拟主机 专门处理MQTT业务,接着我们自己开发一个连接RabbitMQ MQTT服务的客户端

GitHub - harrylsp/MQTTClientContribute to harrylsp/MQTTClient development by creating an account on GitHub.https://github.com/harrylsp/MQTTClient

1.安装MQTTnet库

2. 连接MQTT服务

2.1 创建连接对象

  1. var mqttFactory = new MqttFactory();
  2. mqttClient = mqttFactory.CreateMqttClient() as MqttClient;

2.2 构建连接对象连接参数

  1. var options = new MqttClientOptions
  2. {
  3. ClientId = clientId,
  4. ProtocolVersion = MQTTnet.Formatter.MqttProtocolVersion.V311,
  5. ChannelOptions = new MqttClientTcpOptions
  6. {
  7. Server = tcpServer,
  8. Port = tcpPort
  9. },
  10. WillDelayInterval = 10,
  11. WillMessage = new MqttApplicationMessage
  12. {
  13. Topic = $"LastWill/{clientId}",
  14. Payload = Encoding.UTF8.GetBytes("I Lost the Connection!"),
  15. QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce
  16. }
  17. };
  18. if (options.ChannelOptions == null)
  19. {
  20. throw new InvalidOperationException();
  21. }
  22. if (!string.IsNullOrWhiteSpace(mqttUser))
  23. {
  24. options.Credentials = new MqttClientCredentials
  25. {
  26. Username = mqttUser,
  27. Password = Encoding.UTF8.GetBytes(mqttPassword)
  28. };
  29. }
  30. // 设置为false,表示创建一个持久会话,在客户端断开连接时,会话仍然保持并保存离线消息,直到会话超时注销。
  31. // 设置为true,表示创建一个新的临时会话,在客户端断开时,会话自动销毁。
  32. options.CleanSession = true;
  33. // 连接保活心跳
  34. options.KeepAlivePeriod = TimeSpan.FromSeconds(10);

2.3 注册监听回调事件

  1. mqttClient.ConnectedHandler = new MqttClientConnectedHandlerDelegate(new Action<MqttClientConnectedEventArgs>(e =>
  2. {
  3. LogManager.WriteLogEx(LOGLEVEL.INFO, "客户端已连接");
  4. }));
  5. mqttClient.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(new Action<MqttClientDisconnectedEventArgs>(e =>
  6. {
  7. LogManager.WriteLogEx(LOGLEVEL.INFO, "客户端已断开连接");
  8. }));
  9. mqttClient.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(new Action<MqttApplicationMessageReceivedEventArgs>(e =>
  10. {
  11. string text = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
  12. string topic = e.ApplicationMessage.Topic;
  13. string qos = e.ApplicationMessage.QualityOfServiceLevel.ToString();
  14. string retained = e.ApplicationMessage.Retain.ToString();
  15. LogManager.WriteLogEx(LOGLEVEL.INFO, $"客户端接收消息 >>Topic:{topic}; Qos:{qos}; Retained:{retained}");
  16. LogManager.WriteLogEx(LOGLEVEL.INFO, $"客户端接收消息 >>Msg:{text}");
  17. }));

2.4 发起连接

  1. await mqttClient.ConnectAsync(options);
  2. LogManager.WriteLogEx(LOGLEVEL.INFO, $"客户端{options.ClientId}尝试连接...");

2.5 连接MQTT服务

3. 订阅主题

await mqttClient.SubscribeAsync(topic);

 

4. 发布消息

  1. var message = new MqttApplicationMessage
  2. {
  3. Topic = topic,
  4. Payload = Encoding.UTF8.GetBytes(payload),
  5. QualityOfServiceLevel = MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce,
  6. Retain = true
  7. };
  8. await mqttClient.PublishAsync(message, CancellationToken.None);

 

5.其他

5.1 MQTT协议介绍

 https://docs.emqx.cn/broker/v4.3/development/protocol.html#mqtt%E5%8D%8F%E8%AE%AE

5.2 源码

GitHub - harrylsp/MQTTClient

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/975758
推荐阅读
相关标签
  

闽ICP备14008679号