# mqtt4j-client **Repository Path**: zhangchaohuiget/mqtt4j-client ## Basic Information - **Project Name**: mqtt4j-client - **Description**: 支持集群部署的mqtt客户端spring boot starter封装。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-11 - **Last Updated**: 2024-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mqtt4j-client-spring-boot-starter使用说明 ## 实现思路 ### 术语定义 - 主站和从设备:均为接入MQTT Broker的客户端;这里定义使用此starter的Java服务为主站端,定义真是的物理设备(如:智能音箱等)为从设备。 - 上行和下行:这里定义从设备发送的需要主站接收的消息为上行消息,定义主站发送需从设备接收的消息为下行消息; ### 设计思路 #### 背景 > 市面上的MQTT Broker(如[EMQX Broker](https://docs.emqx.com/zh/emqx/latest/))有[持久会话](https://docs.emqx.com/zh/emqx/latest/durability/durability_introduction.html) > 和[共享订阅](https://docs.emqx.com/zh/emqx/latest/messaging/mqtt-shared-subscription.html)两个特性,但持久会话付费版才支持; #### 实现思路 此 starter 旨在解决从设备向主站发送大量消息的问题。主站接收并处理消息后返回响应。为满足高负载和高并发处理需求,starter 采用了共享订阅机制:主站通过集群部署多个 MQTT 客户端,按共享订阅方式订阅从设备的消息主题。借助该机制,从设备的上行消息能够自动负载均衡到某一主站节点进行处理。同时,主站的集群部署确保了消息消费的高可用性和高并发处理能力,有效提升了系统的可靠性和处理性能。 #### 总体架构 ![总体架构](./images/总体架构.png) ## 组件要求 使用此组件的宿主服务需要集成redis中间件,且配置RedisTemplate; ## 依赖 ```xml com.javadebug.starter mqtt4j-client-spring-boot-starter 1.0.0-SNAPSHOT ``` ## 配置 ```yaml mqtt4j-client: enabled: true # 是否启用mqtt4j客户端 serverIp: 127.0.0.1 # mqtt 服务端ip serverPort: 1883 # mqtt 服务端口 username: admin # 用户名 password: admin # 密码 keepAlive: 60 # 保活时间(单位:秒) ``` ## 上下行交互实体 ### 上行 ```java public class UpMsg { /** * topic */ private String topicName; /** * 数据 */ private String data; } ``` ### 下行 ```java public class DownMsg { /** * mqtt方法 */ private MqttMethodEnum mqttMethod; /** * tipic */ private String topicName; /** * 消息质量标识 */ private int qos; /** * 数据 */ private String data; } ``` ## 使用说明 ### 上行消息消费 1. 实现`com.javadebug.starter.mqtt4j.service.UpBusinessHandleService`接口,并注入到Spring上下文中; 2. 重写`upFrameHandle`方法实现业务逻辑; ### 发送下行消息 1. 注入`com.javadebug.starter.mqtt4j.mqttclient.DownProducer`; 2. 调用`sendMsg`方法发送消息。 ## 示例 参考[mqtt4j-client-spring-boot-starter-example](mqtt4j-client-spring-boot-starter-example)