最优秀的无锡网站建设,中国南昌企业网站制作,湖北工程造价信息网,wordpress支持多少字前言
mica-mqtt-client-spring-boot-starter是一个基于Spring Boot的MQTT客户端启动器#xff0c;它集成了mica-mqtt客户端#xff0c;提供了在Spring Boot应用程序中使用MQTT协议进行消息通信的能力。以下是关于mica-mqtt-client-spring-boot-starter的简介#xff1a;
特…前言
mica-mqtt-client-spring-boot-starter是一个基于Spring Boot的MQTT客户端启动器它集成了mica-mqtt客户端提供了在Spring Boot应用程序中使用MQTT协议进行消息通信的能力。以下是关于mica-mqtt-client-spring-boot-starter的简介
特点 简单易用通过Spring Boot的自动配置可以轻松地集成到Spring应用程序中并使用Spring的注解或Java配置进行MQTT客户端的配置。 低延迟支持MQTT协议能够实现实时消息通信具有较低的延迟。 高性能基于mica-mqtt客户端具有高效的消息处理和网络通信能力能够处理大量的并发连接和消息。 集群支持支持基于Redis的发布/订阅模式的集群可以实现多个节点之间的消息同步和负载均衡。 使用场景适用于需要使用MQTT协议进行消息通信的物联网、实时应用、移动应用等领域。可以在云端或边缘端使用实现设备与设备之间、设备与服务器之间的消息通信。 集成方式通过在Spring Boot项目中添加相关依赖并配置MQTT客户端的相关参数即可快速集成mica-mqtt-client-spring-boot-starter。具体的使用方法可以参考官方文档和示例代码。 注意事项在使用过程中需要注意确保网络连接的稳定性和安全性并根据实际需求进行适当的配置和优化。同时也需要关注数据安全和隐私保护等方面的问题。
总之mica-mqtt-client-spring-boot-starter是一个方便、高效、可靠的MQTT客户端启动器适用于需要使用MQTT协议进行消息通信的Spring Boot应用程序。
功能 支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。 支持 websocket mqtt 子协议支持 mqtt.js。 支持 http rest apihttp api 文档详见[1]。 支持 MQTT client 客户端。 支持 MQTT server 服务端。 支持 MQTT client、server 共享订阅支持捐助VIP版采用 topic 树存储跟 topic 数无关百万 topic 性能依旧。 支持 MQTT 遗嘱消息。 支持 MQTT 保留消息。 支持自定义消息mq处理转发实现集群。 MQTT 客户端 阿里云 mqtt 连接 demo。 支持 GraalVM 编译成本机可执行程序。 支持 Spring boot 项目快速接入mica-mqtt-spring-boot-starter。 mica-mqtt-spring-boot-starter 支持对接 Prometheus Grafana。 基于 redis pub/sub 实现集群详见 mica-mqtt-broker 模块[2]
教程
添加依赖
在springboot项目中添加maven依赖 !-- https://mvnrepository.com/artifact/net.dreamlu/mica-mqtt-client-spring-boot-starter --dependencygroupIdnet.dreamlu/groupIdartifactIdmica-mqtt-client-spring-boot-starter/artifactIdversion2.2.8/version/dependency配置参数
在spring配置文件中配置mqtt相关参数配置如下
mqtt:server: enabled: false # 是否开启服务端默认falseclient:enabled: true # 是否开启客户端默认falseip: 172.16.10.203 # 连接的服务端 ip 默认127.0.0.1port: 1883 # 端口默认1883name: Mica2-Mqtt2-Client # 名称默认Mica-Mqtt-ClientclientId: coalface_safety_3d # 客户端Id非常重要一般为设备 sn不可重复user-name: admin # 认证的用户名 你的用户名password: 3!cHyj # 认证的密码timeout: 5 # 连接超时时间单位秒默认5秒reconnect: true # 是否重连默认truere-interval: 5000 # 重连时间默认 5000 毫秒version: MQTT_3_1 # mqtt 协议版本默认3.1.1read-buffer-size: 8092 # 接收数据的 buffer size默认8092max-bytes-in-message: 8092 # 消息解析最大 bytes 长度默认8092buffer-allocator: heap # 堆内存和堆外内存默认堆内存keep-alive-secs: 60 # keep-alive 心跳维持时间单位秒clean-session: false # mqtt clean session默认truewill-message: # 消息遗嘱qos: at_least_oncessl:enabled: false # 是否开启 ssl 认证2.1.0 开始支持双向认证keystore-path: # 可选参数ssl 双向认证 keystore 目录支持 classpath:/ 路径。keystore-pass: # 可选参数ssl 双向认证 keystore 密码truststore-path: # 可选参数ssl 双向认证 truststore 目录支持 classpath:/ 路径。truststore-pass: # 可选参数ssl 双向认证 truststore 密码注意ssl 存在三种情况
服务端开启ssl客户端ClientAuth 为 NONE不需要客户端验证仅仅需要开启 ssl 即可不用配置证书ClientAuth 为 OPTIONAL与客户端协商需开启 ssl 并且配置 truststore 证书ClientAuth 为 REQUIRE (必须的客户端验证)需开启 ssl 并且配置 truststore、 keystore证书
创建订阅
创建一个mqtt订阅消息监听类例如SimulationSubscriber代码如下 import com.alibaba.fastjson.JSONObject;
import net.dreamlu.iot.mqtt.spring.client.MqttClientSubscribe;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.messaging.handler.annotation.Payload;
import org.springframework.stereotype.Component;
import org.tio.utils.buffer.ByteBufferUtil;/*** author tarzan*/
Component
Slf4j
public class SimulationSubscriber {MqttClientSubscribe(tuoyuan/publish/zj/#)public void zjOne(String topic, byte[] payload){String[] strstopic.split(/);String IDstrs[strs.length-1];log.info(topic:{} payload:{} ID:{}, topic, new String(payload, StandardCharsets.UTF_8),ID);}MqttClientSubscribe(/sys/${deviceName}/thing/sub/register)public void thingSubRegister(String topic, byte[] payload) {// 1.3.8 开始支持MqttClientSubscribe 注解支持 ${} 变量替换会默认替换成 // 注意mica-mqtt 会先从 Spring boot 配置中替换参数 ${}如果存在配置会优先被替换。logger.info(topic:{} payload:{}, topic, new String(payload, StandardCharsets.UTF_8));}MqttClientSubscribe(/tianma/publish/cmj)public void cmj(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}MqttClientSubscribe(/tianma/publish/zj)public void zj(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}MqttClientSubscribe(/tianma/publish/gbj)public void gbj(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}MqttClientSubscribe(/tianma/publish/ltl)public void ltl(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}MqttClientSubscribe(/tianma/publish/ntl)public void ntl(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}MqttClientSubscribe(/tianma/publish/ccl)public void ccl(Header(topic) String topic,Payload byte[] payload) {System.out.println(*****************gc**************************************topic);JSONObject jsonObject JSONObject.parseObject(ByteBufferUtil.toString(payload));//业务的处理System.out.println(*****************test**************************************jsonObject);}} Header(“topic”) 和Payload 注解可以省略 tuoyuan/publish/zj/# 中的# 是通配符 在MQTT协议中#是一个通配符代表匹配该主题的所有子主题。例如如果你订阅了主题sports/baseball/#那么你将接收到所有以sports/baseball/开头的主题的消息。 请注意通配符#只能用于多层的主题名称中并且只能用于最后一个级别。例如sports/baseball/#是有效的但#sports/baseball或sports/#/baseball都是无效的。 除了#之外MQTT协议还支持一个单层通配符它代表只匹配该级别的主题。例如如果你订阅了主题sports/baseball/那么你将只接收到以sports/baseball/开头且后面跟着至少一个字符的主题的消息。 请注意使用通配符时需要谨慎因为它们可能会匹配到意外的主题。确保你的订阅主题明确并且只匹配你感兴趣的主题。 /sys/${deviceName}/thing/sub/register 1.3.8 开始支持MqttClientSubscribe 注解支持 ${} 变量替换会默认替换成 注意mica-mqtt 会先从 Spring boot 配置中替换参数 ${}如果存在配置会优先被替换。
创建发布
创建一个mqtt消息发布接口类例如 MqttTestController代码如下 import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import net.dreamlu.iot.mqtt.spring.client.MqttClientTemplate;
import org.springblade.core.secure.annotation.NoToken;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.nio.charset.StandardCharsets;/*** author tarzan*/
RestController
Api(tags mqtt测试)
NoToken
RequestMapping(/mqtt)
AllArgsConstructor
Slf4j
public class MqttTestController {private final MqttClientTemplate mqttClientTemplate;ApiOperation(value 消息发送)PostMapping(/publish)private RBoolean publish(String topic, String msg) {return R.status(mqttClientTemplate.publish(topic, msg.getBytes(StandardCharsets.UTF_8)));}}
接口测试
接口调用 控制台输出