SpringBoot整合mica-mqtt组件(客户端)Demo

本文介绍了如何在SpringBoot项目中集成和配置Mica-Mqtt组件,包括添加依赖、配置连接参数、处理连接状态和消息订阅/发布。还提供了客户端连接监听、订阅示例以及MqttClientTemplate的使用案例。
摘要由CSDN通过智能技术生成

【mica-mqtt】低延迟、高性能的 mqtt 物联网组件

1、引入依赖

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

2、添加yml配置

mqtt:
  client:
    enabled: true               # 是否开启客户端,默认:true
    ip: 127.0.0.1               # 连接的服务端 ip ,默认:127.0.0.1
    port: 1883                  # 端口:默认:1883
    name: Mica-Mqtt-Client      # 名称,默认:Mica-Mqtt-Client
    client-id: 000001           # 客户端Id(非常重要,一般为设备 sn,不可重复)
    user-name: admin             # 认证的用户名
    password: 123456            # 认证的密码
    global-subscribe:           # 全局订阅的 topic,可被全局监听到,保留 session 停机重启,依然可以接受到消息。(2.2.9开始支持)
    timeout: 5                  # 超时时间,单位:秒,默认:5秒
    reconnect: true             # 是否重连,默认:true
    re-interval: 5000           # 重连时间,默认 5000 毫秒
    version: mqtt_3_1_1         # mqtt 协议版本,可选 MQTT_3_1、mqtt_3_1_1、mqtt_5,默认:mqtt_3_1_1
    read-buffer-size: 8KB       # 接收数据的 buffer size,默认:8k
    max-bytes-in-message: 10MB  # 消息解析最大 bytes 长度,默认:10M
    buffer-allocator: heap      # 堆内存和堆外内存,默认:堆内存
    keep-alive-secs: 60         # keep-alive 时间,单位:秒
    clean-session: true         # mqtt clean session,默认:true
    ssl:
      enabled: false            # 是否开启 ssl 认证,2.1.0 开始支持双向认证
      keystore-path:            # 可选参数:ssl 双向认证 keystore 目录,支持 classpath:/ 路径。
      keystore-pass:            # 可选参数:ssl 双向认证 keystore 密码
      truststore-path:          # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
      truststore-pass:          # 可选参数:ssl 双向认证 truststore 密码

3、代码示例

(1)客户端连接状态监听

@Slf4j
@Service
public class MqttClientConnectListener {

    @Resource
    private MqttClientCreator mqttClientCreator;

    @EventListener
    public void onConnected(MqttConnectedEvent event){
        log.info("MqttConnectedEvent:{}", event);
        log.info("Mqtt 启动成功");
    }

    @EventListener
    public void onDisconnected(MqttDisconnectEvent event){
        // 离线时更新重连时的密码,适用于类似阿里云 mqtt clientId 连接带时间戳的方式
        log.info("MQtt 重连....");
        log.info("MqttDisconnectEvent:{}", event);
        // 在断线时更新 clientId、username、password
        mqttClientCreator.clientId("newClient" + System.currentTimeMillis())
                .username("admin")
                .password("123456");
    }
}

(2)订阅示例

@Slf4j
@Service
public class MqttClientSubscribeListener {

    @MqttClientSubscribe(value = "/test", qos = MqttQoS.EXACTLY_ONCE)
    public void subQos2(String topic, byte[] payload) {
        String message = new String(payload, StandardCharsets.UTF_8);
        log.info("topic:{} payload:{}", topic, message);
    }
}

(3)MqttClientTemplate 使用示例

@Slf4j
@Service
public class MicaMqttService {

    @Resource
    private MqttClientTemplate mqttClientTemplate;

    public String sub(String topicFilter) {
        mqttClientTemplate.subQos2(topicFilter, (context, topic, message, payload) -> {
            log.info("topic:" + topic);
            log.info(new String(payload, StandardCharsets.UTF_8));
        });
        return "success";
    }

    public String publish(String topic, String msg){
        boolean flag = mqttClientTemplate.publish(topic, msg.getBytes(StandardCharsets.UTF_8), MqttQoS.EXACTLY_ONCE);
        return flag ? "success" : "fail";
    }
}
@Slf4j
@RestController
@RequestMapping("/mqtt")
public class MqttController {

    @Resource
    private MicaMqttService micaMqttService;

    @GetMapping("/publish")
    public String publish(String topic, String msg){
        return micaMqttService.publish(topic, msg);
    }

    @GetMapping("/sub")
    public String sub(String topic){
        return micaMqttService.sub(topic);
    }

}

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值