物联网实战|Spring Boot MQTT平台 |emqx broker实战

物联网实战|Spring Boot MQTT平台 |emqx broker实战

📑 目录

  1. 物联网实战|Spring Boot MQTT平台 |emqx broker实战

1.1 emqx官网

1.2 docker部署emqx

1.2.1 前期准备和权限开通

1.2.2 docker构建emqx broker应用

1.3 spring-boot接入emqx broker

1.3.1 pom依赖

1.3.2 源码

1.3.3 客户端注册部分代码

1.3.4 客户端注册信息

1.3.5 订阅部分代码

1.3.6 emqx 模拟下发

1.3.7 操作

EMQX 是一款「无限连接,任意集成,随处运行」的大规模分布式物联网接入平台 基于版本6.2.2

emqx官网

https://docs.emqx.com/zh/emqx/latest/

docker部署emqx

其中18083 为网页访问端口 (http://127.0.0.1:28084/#/dashboard/overview)

  • 账号

默认为 admin/public

前期准备和权限开通

bash

复制代码
mkdir -p /data/emqx/
chmod -R 777 /data/

docker构建emqx broker应用

bash

复制代码
  docker run -d   \
  --name emqx   \
  --restart always   \
  -p 1883:1883   \
  -p 8083:8083   \
  -p 8084:8084   \
  -p 8883:8883   \
  -p 28084:18083  \
  -p 18085:18085   \
  -v /data/emqx/data:/opt/emqx/data   \
  -v /data/emqx/log:/opt/emqx/log   \
  -e EMQX_COPY_CONF=true   \
  emqx/emqx:latest

spring-boot接入emqx broker

pom依赖

xml

复制代码
<class="tk-tag">dependencies>
    <!-- HiveMQ MQTT5 客户端(同时兼容 MQTT3.1.1) -->
    <class="tk-tag">dependency>
        <class="tk-tag">groupId>com.hivemq</class="tk-tag">groupId>
        <class="tk-tag">artifactId>hivemq-mqtt-client</class="tk-tag">artifactId>
        <class="tk-tag">version>1.3.15</class="tk-tag">version>
    </class="tk-tag">dependency>
</class="tk-tag">dependencies>

<class="tk-tag">dependencyManagement>
    <class="tk-tag">dependencies>
        <!-- Spring Boot Starter -->
        <class="tk-tag">dependency>
            <class="tk-tag">groupId>org.springframework.boot</class="tk-tag">groupId>
            <class="tk-tag">artifactId>spring-boot-dependencies</class="tk-tag">artifactId>
            <class="tk-tag">version>3.5.11</class="tk-tag">version>
            <class="tk-tag">type>pom</class="tk-tag">type>
            <class="tk-tag">scope>import</class="tk-tag">scope>
        </class="tk-tag">dependency>
    </class="tk-tag">dependencies>
</class="tk-tag">dependencyManagement>

源码

https://gitee.com/kcnf-iot/iot-sample/tree/master/emqx

客户端注册部分代码

java

复制代码
package com.jysemel.iot.client;

import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient;
import com.hivemq.client.mqtt.mqtt5.Mqtt5Client;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.UUID;

@Slf4j
@Configuration
public class MqttConfig {

    @Bean
    public Mqtt5AsyncClient mqtt5AsyncClient() {
        // 使用 Builder 模式创建异步客户端
        Mqtt5AsyncClient client = Mqtt5Client.builder()
                .identifier("client" + UUID.randomUUID()) // 设置客户端ID,需唯一
                .serverHost("192.168.0.19") // Broker 地址
                .serverPort(1883) // 默认非加密端口
                .buildAsync(); // 构建异步客户端

        // 连接到 Broker
        client.connect()
                .whenComplete((connAck, throwable) -> {
                    if (throwable != null) {
                        System.err.println("MQTT 连接失败: " + throwable.getMessage());
                        // 可以在这里添加重试逻辑
                    } else {
                        System.out.println("MQTT 连接成功!");
                    }
                });
        return client;
    }
}

客户端注册信息

订阅部分代码

java

复制代码
package com.jysemel.iot.client;

import com.hivemq.client.mqtt.datatypes.MqttQos;
import com.hivemq.client.mqtt.mqtt5.Mqtt5AsyncClient;
import jakarta.annotation.PostConstruct;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.nio.charset.StandardCharsets;

@Service
public class MqttSubscribeService {

    @Autowired
    private Mqtt5AsyncClient mqttClient;

    // 使用 @PostConstruct 在 Bean 初始化后自动订阅
    @PostConstruct
    public void subscribe() {
        String topic = "server/v1/test";
        mqttClient.subscribeWith()
                .topicFilter(topic) // 订阅的主题
                .qos(MqttQos.AT_LEAST_ONCE)
                .callback(publish -> {
                    // 处理收到的消息
                    String payload = new String(publish.getPayloadAsBytes(), StandardCharsets.UTF_8);
                    System.out.println("收到消息,主题: " + publish.getTopic() + ", 内容: " + payload);
                })
                .send()
                .whenComplete((subAck, throwable) -> {
                    if (throwable != null) {
                        System.err.println("订阅失败: " + throwable.getMessage());
                    } else {
                        System.out.println("订阅主题 'test/topic' 成功!");
                    }
                });
    }
}

emqx 模拟下发

json

复制代码
{ "msg": "hello" }

操作

相关推荐
学长毕业设计1 小时前
基于springboot的云南中草药知识普及管理网站的设计与开发(源码+文档+讲解视频)
java·spring boot·后端
小江的记录本1 小时前
【AI Agent】《2026年9月 AI Agent全栈开发技术选型专项面试宝典》
java·spring boot·python·spring·ai·面试·ai编程
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 9 章 使用 WebMvc 开发应用 阅读笔记 2
java·spring boot·笔记
步行cgn3 小时前
@RestController 详解:从源码到实践
spring boot
孙6903423 小时前
Spring 注入多例 Bean
java·spring
边境悍匪4 小时前
springboot常用注解
java·spring boot·学习
李昊哲小课4 小时前
Spring Boot 4 旅游主题实战教程 阶段四:缓存与底层进阶
spring boot·redis·缓存·性能优化·log4j·旅游·性能
杨运交5 小时前
[065][缓存模块]Hibernate二级缓存自定义实现:基于Spring Cache的多级缓存适配器
spring·缓存·hibernate
QQ_21696290966 小时前
【源码编号:project93375】SpringBoot汽车维修管理信息系统:客户车辆、维修预约、工单派发、配件结算全流程实战
java·spring boot·后端·汽车·springboot·需求分析
xcl09256 小时前
流浪宠物领养管理系统开发实战:从需求分析到落地的完整指南
java·spring boot·需求分析·宠物