# springboot-zengge-mqtt **Repository Path**: luoke365/springboot-zengge-mqtt ## Basic Information - **Project Name**: springboot-zengge-mqtt - **Description**: ZENGGE Wi-Fi 物联网开发套件 云端 开源 Demo - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-12-16 - **Last Updated**: 2024-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # springboot-zengge-mqtt #### 介绍 **springboot-zengge-mqtt 实现了springboot与mqtt的集成。注解订阅与自动配置。** #### 使用教程 添加Maven依赖: ```xml com.zengge.mqtt springboot-zengge-mqtt 1.0-SNAPSHOT ``` #### 参数配置 ```yaml mqtt: list: - instanceName: device_mqtt serverKey: ${serverKey} serverSecret: ${serverSecret} productKey: ${productKey} keepAlive: 60 ssl: false host: cnwifidevsdk.magichue.net port: 1883 poolConfig: initMax: 3 maxClients: 4 waitTime: 3000 minIdle: 3 keepAliveInterval: 60 ``` ### 参数说明 | 字段 | 类型 | 描述 | | -------- | -----: | :----: | | instanceName | String | instanceName 用来区分多台不域名的服务器或者serverKey的连接 | | serverKey | String | [serverKey][0] | | serverSecret | String | [serverSecret][0] | | productKey | Long | [productKey][0] | | keepAlive | Integer | MQTT 连接心跳 | | ssl | Boolean | 是否开启SSL | | host | String | MQTT服务器的域名 | | port | Integer | MQTT服务器端口 | | poolConfig | Object | 发送消息连接池 | | initMax | Integer | 连接池初始大小 | | maxClients | Integer | 最大连接数 | | waitTime | Integer | 连接等待时间 | | minIdle | Integer | 空闲大小 | | keepAliveInterval | Integer | 连接池心跳 | [0]: https://cnwifidevsdk.magichue.net/ziot ### 使用范例 **1 启动发布者与订阅者** 使用@StartupPublisher和@StartupSubscriber注解启动发布者和订阅者,订阅者需要添加扫描包路径,实现订阅者类的自动注入。 ```java @SpringBootApplication @StartupPublisher @StartupSubscriber(basePackages = { "com.zengge.demo.subscriber" }) public class MainApplication { public static void main(String[] args){ SpringApplication springApplication = new SpringApplication(MainApplication.class); springApplication.run(args); } } ``` **2 实现消息订阅** * @MQTTSubscriber注解标示订阅者,如果没有该注解的类会给@StartupSubscriber的自动注入忽略。 * @SubscribeTopic 在订阅者的方法下添加@SubscribeTopic并且设置instanceName,topic,qos参数,MQTT消息会自动匹配该方法上的注解的Topic参数进行方法回调。 ```java @MQTTSubscriber public class Subscriber { private final static Logger logger = LoggerFactory.getLogger(Subscriber.class); @SubscribeTopic(instanceName = "device_mqtt", topic = {"1431502354/+/deviceSubscribe"}, qos = {0}) public void deviceSubscribe(@ReceiveTopic String topic, @Payload JsonPayload payload){ JsonPayload.parse(payload, new ParseCallback() { @Override public void onStatus(byte[] bytes) { logger.info("topic : "+topic+" onStatus "+ ByteUtil.bytesToHexString(bytes)); } @Override public void onState(boolean b) { logger.info("topic : "+topic+" onState "+ b); } @Override public void onResponse(byte[] bytes) { logger.info("topic : "+topic+" onResponse "+ ByteUtil.bytesToHexString(bytes)); } @Override public void onException(Throwable throwable) { logger.error("topic : "+topic+" onResponse "+ throwable.getMessage()); } }); } } ``` **3 发布消息** * @Resource 如果存在多个instanceName,@Resource的name参数必须要指定。name规则是instanceName_publisher ```java @RestController public class MQTTController { @Resource(name = "device_mqtt_publisher") private MQTTPahoPublishers mqttPahoPublishers; public MQTTController() { } @PostMapping("sendMessage") public String sendMessage(){ JsonPayload payload = JsonPayload.toDeviceHex(new byte[]{(byte) 0xAA,0x01}); // 开灯 mqttPahoPublishers.publishQos("1431502354/7382E44D1BB34AC0A8099FDC89F7D50B/control", payload,false); return "ok"; } } ```