MQTT topic匹配规则

MQTT topic匹配规则

原文连接:

https://blog.youkuaiyun.com/JiangCheng817/article/details/81333893

内容:

主题层级分隔符 “/”:
表示层级关系
单层通配符 “+”:
订阅消息时使用,匹配一层主题如 a/+ 匹配诸如 a/b a/c 但是不能匹配 a/b/c,特别的单独的+可以匹配所有单层主题
多层通配符”#”:
订阅消息时使用,匹配零或层主题如 a/# 匹配诸如 a/b a/b/c a ,特别的#单独使用匹配所有。

注:使用通配符时需要保证创建的policy里有相应规则的topic,比如a/+(设为只订阅),如果没有是无法在连接时通过订阅a/+匹配到该policy里其他相关的诸如a/b a/c等主题

### C# 中使用 MQTT 协议进行 TOPIC 操作 为了实现基于 C# 的 MQTT 客户端应用程序,通常会选择像 `MqttClient` 这样的库来简化开发过程[^1]。 #### 创建客户端并连接到代理服务器 首先需要创建一个 MQTT 客户端实例,并通过指定的 URI 和选项建立与代理服务器之间的安全连接: ```csharp var factory = new MqttFactory(); IMqttClient client = factory.CreateMqttClient(); // 设置连接参数 var options = new MqttClientOptionsBuilder() .WithTcpServer("broker.hivemq.com", 1883) .Build(); await client.ConnectAsync(options, CancellationToken.None); ``` #### 订阅主题 (Subscribe to Topics) 订阅特定的主题以便接收消息。可以使用通配符 (`+`, `#`) 来定义更灵活的话题模式匹配规则[^2]: ```csharp string topicFilter = "home/+/temperature"; // 使用 + 可以匹配任意单级子话题 client.Subscribe(new TopicFilterBuilder().WithTopic(topicFilter).Build()); ``` 对于多层嵌套结构,则可以用 `#` 表示从当前位置起所有下级层次的内容都将被包含进来: ```csharp string wildcardSubscription = "sensor/#"; // 使用 # 匹配当前及以下所有层级 client.Subscribe(new TopicFilterBuilder().WithTopic(wildcardSubscription).Build()); ``` #### 发布消息至指定主题(Publish Messages To A Specific Topic) 当准备好向某个具体主题发送数据时,可以通过调用 Publish 方法完成此操作。这里展示了一个简单的例子,其中包含了设置 QoS 级别以及是否保留该条目作为历史记录的一部分[^3]: ```csharp byte[] payloadBytes = Encoding.UTF8.GetBytes("Current temperature is 75°F"); var message = new MqttApplicationMessageBuilder() .WithTopic("home/livingroom/temperature") .WithPayload(payloadBytes) .WithQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce) .WithRetainFlag() .Build(); await client.PublishAsync(message, CancellationToken.None); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值