MQTT - Java

本文介绍了MQTT协议的基础知识,包括其发布订阅模式和QoS服务质量等级。通过Java代码展示了如何创建MQTT客户端,并整合Spring Boot进行实战应用。同时提到了MQTT 5.0的新特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

MQTT - 轻量级的物联网消息传输协议

文章目录
MQTT 协议入门与进阶 | EMQ (emqx.com)

一、概述

​ MQTT - 是基于二进制消息的发布/订阅编程模式的消息协议,最早由IBM提出的,如今已经成为OASIS规范,适合需要低功耗和网络带宽有限的IoT场景。

​ 其拥有以下特性

  • 发布订阅模式:通过发布订阅模式 Client/Server 的一种传统解耦方案,使得发布者和消费者之间不必预先知道对方的存在;

  • 服务质量(Quality of Service,QoS):支持三种级别

    1. 级别0:尽力而为,消息发送者会想尽办法发送消息,但是遇到意外并不会重试。
    2. 级别1:至少一次,消息接收者如果没有知会或者知会本身丢失,消息发送者会再次发送以保证消息接收者至少会收到一次,当然可能造成重复消息。
    3. 级别2:恰好一次,保证这种语义肯待会减少并发或者增加延时,不过丢失或者重复消息是不可接受的时候,级别2是最合适的。
  • 支持14种不同的消息类型

    1. CONNECT:客户端连接到MQTT代理;
    2. CONNACK:连接确认;
    3. PUBLISH:新发布消息;
    4. PUBACK:新发布消息确认,是QoS 1给PUBLISH消息的回复;
    5. PUBREC:QoS 2消息流的第一部分,表示消息发布已记录;
    6. PUBREL:QoS 2消息流的第二部分,表示消息发布已释放;
    7. PUBCOMP:QoS 2消息流的第三部分,表示消息发布完成;
    8. SUBSCRIBE:客户端订阅某个主题;
    9. SUBACK:对于SUBSCRIBE消息的确认;
    10. UNSUBSCRIBE:客户端终止订阅的消息;
    11. UNSUBACK:对于UNSUBSCRIBE消息的确认;
    12. PINGREQ:心跳;
    13. PINGRESP:确认心跳;
    14. DISCONNECT:客户端终止连接前优雅地通知MQTT代理;

二、入门使用

​ 这里使用了EMQ(杭州映云科技有限公司)的专业版试用产品作为学习,感谢老铁送来的火箭。

​ 首先新增一个认证账号,总不能随都可以随便接入吧。

接下来就进行Demo开发

1 MQTT客户端Java代码

​ 先来看看官方的Demo,首先通过Web的调试工具插入消息。

然后新加入Java代码

package com.ljm.mqtt;

import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MqttSample {
   
   
    public static void main(String[] args) {
   
   
        String topic = "test/topic";
        String content = "Hello World";
        int qos = 2;
        String broker = "tcp://IP地址:1883";
        String clientId = MqttClient.generateClientId();
        //  持久化
        MemoryPersistence persistence = new MemoryPersistence();
        // MQTT 连接选项
        MqttConnectOptions connOpts = new MqttConnectOptions();
        // 设置认证信息
        connOpts.setUserName("lijiamin");
        connOpts.setPassword("passwd".toCharArray());

        try {
   
   
            MqttClient client = new MqttClient(broker, clientId, persistence);
            // 设置回调
            client.setCallback(new SampleCallback());
            // 建立连接
            System.out.println("Connecting to broker: " + broker);
            client.connect(connOpts);
            System.out.println("Connected to broker: " + broker);
            // 订阅 topic
            client.subscribe(topic, qos);
            System.out.println("Subscribed to topic: " + topic);
            // 发布消息
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            client.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值