MQTT_基础向_发布、订阅、取消订阅

学习客户端如何实现发布信息、订阅主题以及如何取消订阅主题

(一)PUBLISH - 发布消息

MQTT客户端在发布消息的时候,会向服务端发送PUBLISH报文。

  1. packetId - 报文标识符
    • 报文标识符可用于对MQTT报文进行标识。不同的MQTT报文的标识符不同。MQTT设备可以通过不同的标识符对MQTT报文进行甄别和管理。
    • 只有QoS级别大于0时,报文标识符才是非零值。如果QoS等于0,则报文标识符为0。
  2. topicName - 主题名
    • 主题名用于识别此信息应该发布到哪一个主题。
  3. QoS - 服务质量等级
    • 表示MQTT消息的服务质量等级,共有三个几级别:0、1、2。
    • QoS决定了MQTT通讯有什么样的服务保证。
  4. retainFlag - 保留标志
    • 在默认情况下,客户端在订阅了一个新的主题之后,并不会马上接收到该主题的信息。只有在客户端订阅了主题之后,服务端接收到该主题的新消息时,服务端才会将最新接收到的该主题的信息推送到客户端。
    • 但在某些情况下,我们需要客户端在订阅某一主题后马上接收到一条该主题的信息。这时候就需要用到保留标志这一信息。
  5. payload - 有效载荷
    • 有效载荷是我们希望客户端发布的实际内容。我们可以使用MQTT协议发送文本,图像等格式的内容。
  6. dupFlag - 重发标志
    • 当MQTT报文的接收方没有及时的确认收到报文时,发送方会重复发送MQTT报文。
    • 在重复发送MQTT报文时,发送方会将此重发标志设置为“true”。
    • 注意,重发标志只有当QoS级别大于0时使用。
(二)SUBSCRIBE - 订阅主题
  • 客户端想要订阅主题,首先要向服务端发送主题订阅请求。客户端通过向服务端发送SUBSCRIBE报文来实现这一请求。
  • 一个SUBSCRIBE报文可以包含有单个或者多个订阅主题名。也就是说,一个SUBSCRIBE报文可以用于订阅一个或者多个主题。
  • 每一个SUBSCRIBE报文还包含有“报文标识符”,报文标识符可以用于对MQTT报文进行标志。不同的MQTT报文所拥有的标识符不同。
(三)SUBACK - 订阅确认

当服务端接收到客户端的订阅报文之后,会向客户端发送SUBACK报文确认订阅。SUBACK报文包含有:订阅返回码、报文标识符。

  1. returnCode(订阅返回码)
    • 客户端可以通过一个SUBSCRIBE报文发送多个主题的订阅请求,服务端会针对SUBSCRIBE报文中所有订阅主题来注意回复给客户端一个返回码。
    • 这个返回码是用来告知客户端是否成功订阅了主题。
返回码Return Code Response
0订阅成功 - QoS 0
1订阅成功 - QoS 1
2订阅成功 - QoS 2
128订阅失败
  1. packetId(报文标识符)
    • MQTT设备通过报文标识符对报文进行管理。
(四)UNSUBSCRIBE - 取消订阅

当客户端要取消订阅某主题时,可以通过向服务端发送UNSUBSCRIBE报文来进行取消订阅。


UNSUBSCRIBE报文包含两个重要信息,一个时取消订阅的主题名称,一个是报文标识符。

  1. topic* - 取消订阅主题
    • 同一个UNSUBSCRIBE报文可以同时包含多个取消订阅的主题名称。
  2. packetId - 报文标识符
    • MQTT设备可以通过该标识符对报文进行管理。
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,我可以帮你解答关于 Java 编程中使用 MQTT 的问题。MQTT 是一种轻量级的消息传输协议,它可以用于连接 IoT 设备、移动应用程序和其他需要实时通信的应用程序。 在 Java 编程中使用 MQTT,你需要先下载并导入 Eclipse Paho MQTT 客户端库。这个库包含了一些类和方法,可以让你方便地连接到 MQTT 代理服务器,并发送和接收消息。 下面是一个简单的 Java 代码示例,演示了如何使用 Eclipse Paho MQTT 客户端库连接到 MQTT 代理服务器,并发布一个消息: ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MQTTClient { public static void main(String[] args) { String topic = "test/topic"; String content = "Hello, world!"; int qos = 2; String broker = "tcp://mqtt.eclipse.org:1883"; String clientId = "JavaMQTTClient"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient client = new MqttClient(broker, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); System.out.println("Connecting to broker: " + broker); client.connect(connOpts); System.out.println("Connected"); System.out.println("Publishing message: " + content); MqttMessage message = new MqttMessage(content.getBytes()); message.setQos(qos); client.publish(topic, message); System.out.println("Message published"); client.disconnect(); System.out.println("Disconnected"); } catch (MqttException me) { System.out.println("Reason: " + me.getReasonCode()); System.out.println("Message: " + me.getMessage()); System.out.println("Loc: " + me.getLocalizedMessage()); System.out.println("Cause: " + me.getCause()); System.out.println("Excep: " + me); me.printStackTrace(); } } } ``` 在这个示例中,我们创建了一个 MqttClient 对象来连接到 MQTT 代理服务器,并指定了要连接的代理服务器的地址和端口号。然后,我们使用 MqttConnectOptions 对象来设置连接选项,例如设置是否使用清除会话、设置用户名和密码等。 接下来,我们使用 MqttMessage 对象来创建一个要发布的消息,并设置该消息的 QoS 等级。最后,我们使用 MqttClient 对象的 publish() 方法将该消息发布到指定的主题上。 当连接完成后,我们调用了 MqttClient 对象的 disconnect() 方法来断开与代理服务器的连接。 请注意,这只是一个简单的示例,实际上在使用 MQTT 时还需要考虑很多因素,例如如何处理连接丢失、如何处理 QoS 重传、如何处理订阅取消订阅等。如果你想深入了解 MQTT 的相关知识,可以参考 Eclipse Paho 官方文档或其他相关资源。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

排骨炖粉条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值