You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级MQTTnet至最新版后缺失MQTTnet.Client命名空间求解决方案

MQTTnet 4.x 重大变更及适配示例

核心变更说明

MQTTnet 4.x 对命名空间结构做了大幅精简重构,你提到的几个子命名空间已被合并调整:

  • MQTTnet.Client.Connecting、MQTTnet.Client.Disconnecting、MQTTnet.Client.Receiving下的事件参数类,现在直接归属到MQTTnet.Client命名空间
  • MQTTnet.Client.Options下的配置类(如MqttClientOptions),现在移至MQTTnet.Client命名空间

适配新版的托管客户端示例

以下是基于4.x版本的托管MQTT客户端基础使用代码:

using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Extensions.ManagedClient;
using System.Text;

// 创建托管客户端实例
var managedClient = new ManagedMqttClientBuilder()
    .WithAutoReconnectDelay(TimeSpan.FromSeconds(5))
    .Build();

// 配置客户端连接选项
var clientOptions = new MqttClientOptionsBuilder()
    .WithTcpServer("your-broker-address", 1883)
    .WithClientId("unique-client-id")
    .WithCleanSession()
    .Build();

// 绑定连接成功事件
managedClient.ConnectedAsync += async e =>
{
    Console.WriteLine("客户端已连接至MQTT broker");
    // 订阅目标主题
    await managedClient.SubscribeAsync(new MqttTopicFilterBuilder().WithTopic("device/data").Build());
};

// 绑定断开连接事件
managedClient.DisconnectedAsync += async e =>
{
    Console.WriteLine($"客户端断开连接,原因:{e.Reason}");
};

// 绑定消息接收事件
managedClient.ApplicationMessageReceivedAsync += e =>
{
    var payload = Encoding.UTF8.GetString(e.ApplicationMessage.Payload);
    Console.WriteLine($"收到消息:主题={e.ApplicationMessage.Topic},内容={payload}");
    return Task.CompletedTask;
};

// 启动托管客户端并执行连接
await managedClient.StartAsync(new ManagedMqttClientOptionsBuilder()
    .WithClientOptions(clientOptions)
    .Build());

// 发布消息示例
await managedClient.EnqueueAsync("device/data", "Hello MQTTnet 4.x");

其他注意事项

  • 4.x版本中,所有异步事件统一使用Async后缀(如ConnectedAsync替代旧版的Connected)
  • 配置类的构建器API整体兼容,但部分参数名称有微调,可借助IDE智能提示快速调整

内容的提问来源于stack exchange,提问作者Hamilton Woods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 11:57:08