Springboot整合MQTT订阅和发布

文章介绍了MQTT作为轻量级的物联网连接协议,其设计适合低带宽和受限设备。MQTT协议的特点包括开放、简单、高效,适用于M2M和IoT场景。文中展示了如何在Springboot项目中集成MQTT依赖,配置数据源,并提供了发布和订阅消息的示例代码,包括使用Postman进行测试。文章最后提到了可能出现的乱码问题及MQTT客户端工具的使用。

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

先介绍一下MQTT是什么

MQTT是机器对机器(M2M)/物联网(IoT)连接协议。它被设计为一个极其轻量级的发布/订阅消息传输协议。对于需要较小代码占用空间和/或网络带宽非常宝贵的远程连接非常有用,是专为受限设备和低带宽、高延迟或不可靠的网络而设计。这些原则也使该协议成为新兴的“机器到机器”(M2M)或物联网(IoT)世界的连接设备,以及带宽和电池功率非常高的移动应用的理想选择。例如,它已被用于通过卫星链路与代理通信的传感器、与医疗服务提供者的拨号连接,以及一系列家庭自动化和小型设备场景。它也是移动应用的理想选择,因为它体积小,功耗低,数据包最小,并且可以有效地将信息分配给一个或多个接收器。

特点

开放消息协议,简单易实现
发布订阅模式,一对多消息发布
基于TCP/IP网络连接,提供有序,无损,双向连接。
1字节固定报头,2字节心跳报文,最小化传输开销和协议交换,有效减少网络流量。
消息QoS支持,可靠传输保证。

应用领域

MQTT协议广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等领域。

物联网M2M通信,物联网大数据采集
Android消息推送,WEB消息推送
移动即时消息,例如Facebook Messenger
智能硬件、智能家具、智能电器
车联网通信,电动车站桩采集
智慧城市、远程医疗、远程教育
电力、石油与能源等行业市场

废话不多说上干货
在网上找搭建MQTT
搭建完之后
在Springboot项目加上mqtt依赖包

 <dependency>
                <groupId>net.dreamlu</groupId>
                <artifactId>mica-mqtt-spring-boot-starter</artifactId>
                 <mqtt-version>1.2.0</mqtt-version>
            </dependency>

配置数据源

mqtt:
    server:
        enabled: false
    client:
        enabled: true               # 是否开启客户端,默认:false
        #ip: 120.46.157.141   # 连接的服务端 ip ,默认:127.0.0.1
        ip: 120.46.157.141   # 连接的服务端 ip ,默认:127.0.0.1
        port: 1883                  # 端口:默认:1883
        name: Mica2-Mqtt2-Client      # 名称,默认:Mica-Mqtt-Client
        clientId: 0200001222            # 客户端Id(非常重要,一般为设备 sn,不可重复)
        user-name: 你的用户名           # 认证的用户名 你的用户名
        password:你的密码       # 认证的密码
        timeout: 5                  # 连接超时时间,单位:秒,默认:5秒
        reconnect: false             # 是否重连,默认:true
        re-interval: 5000           # 重连时间,默认 5000 毫秒
        version: MQTT_3_1           # mqtt 协议版本,默认:3.1.1
        read-buffer-size: 8092      # 接收数据的 buffer size,默认:8092
        max-bytes-in-message: 8092  # 消息解析最大 bytes 长度,默认:8092
        buffer-allocator: heap      # 堆内存和堆外内存,默认:堆内存
        keep-alive-secs: 60         # keep-alive 心跳维持时间,单位:秒
        clean-session: false         # mqtt clean session,默认:true
        will-message:
            qos: at_least_once

按照自己的实际情况测试方法

@Autowired
    private MqttClientMattPublisher mqttClientMattPublisher;
/**
     * mqtt测试——topic-cmdSubTopic
     */
     //参数 topic:是你的消息类型
     
  /**
     * mqtt测试——topic-cmdSubTopic
     */
    @GetMapping("/cmdSubTopic")
    public void cmdSubTopic(String topic,String jsonname,String value )
    {
   		// 设置的你JSON格式
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("ver","1.1.0");
        jsonObject.put("jsonname",jsonname);
        jsonObject.put("value",value);

        mqttClientMattPublisher.cmdSubTopic(topic,jsonObject.toJSONString());
    }
@Service
public class MqttClientMattPublisher {
	@Autowired
	private MqttClientTemplate client;
/**
	 * mqtt测试发布消息
	 * @param json
	 * @return
	 */
	public boolean cmdSubTopic(String topic,String json) {
		Map map = JSONObject.parseObject(json, Map.class);
		boolean a=client.publish(topic,ByteBuffer.wrap(JSONObject.toJSONString(map).getBytes(StandardCharsets.UTF_8)),MqttQoS.AT_LEAST_ONCE);
		return a;
	}

}

使用Postman测试看效果
在这里插入图片描述
在控制台可以看出我们的消息是否成功
MQTT Topic:/test/44E48AED4ADB4B04A9A7AE4B9435EB9E/a qos:AT_LEAST_ONCE retain:false publish result:true 就是发布成功 false 发布不成功
在这里插入图片描述
咱们在看MQTT.xf(是一个mqtt客户端工具)链接:https://pan.baidu.com/s/1ukUoLIizmUp2XnGewvB73Q
提取码:20tv
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我现在再试在我们Springboot订阅消息
首先我们先发布消息 注意要是json格式的
在这里插入图片描述
点击Log 我们已经发布消息
在这里插入图片描述

/**
 * 订阅
 */
@Service
public class MqttClientSubscribeMattListener {
private static final Logger logger = LoggerFactory.getLogger(MqttClientSubscribeMattListener.class);

@MqttClientSubscribe("/test/44E48AED4ADB4B04A9A7AE4B9435EB9E/a")
	public void info(String topic, ByteBuffer payload) {
		System.out.println("*****************gc**************************************"+topic);
		JSONObject jsonObject = JSONObject.parseObject(ByteBufferUtil.toString(payload));
		//业务的处理
		System.out.println("*****************test**************************************"+jsonObject);

	}
}

在这里插入图片描述

  • BUG乱码问题待解决
    到这里MQTT发布和订阅就完成了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小小码农>>>>

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

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

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

打赏作者

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

抵扣说明:

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

余额充值