关于java:micamqtt-224-发布简单易用的-java-mqtt

35次阅读

共计 4369 个字符,预计需要花费 11 分钟才能阅读完成。

一、简介

mica-mqtt 基于 java aio 实现的 简略 低提早 高性能 的 mqtt 物联网开源组件。

mica-mqtt 更加易于集成到已有服务和二次开发,升高自研物联网平台开发成本。

二、性能

  • 反对 MQTT v3.1、v3.1.1 以及 v5.0 协定。
  • 反对 websocket mqtt 子协定(反对 mqtt.js)。
  • 反对 http rest api,http api 文档详见。
  • 反对 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 模块。

三、应用场景

  • 物联网(云端 mqtt broker)
  • 物联网(边缘端音讯通信)
  • 群组类 IM
  • 音讯推送
  • 简略、易用的 mqtt client 客户端

四、更新记录

v2.2.4 – 2023-09-02

  • 合并去年开源之夏的服务端共享订阅和欠缺。
  • 优化 topic 测验
  • 雷同 clientId 订阅雷同 匹配 topic 应该取最大的 qos gitee #I7WWPN

共享订阅

mica-mqtt 反对两种 共享订阅 形式:

  1. 共享订阅:订阅前缀 $queue/,多个客户端订阅了 $queue/topic,发布者公布到 topic,则只有一个客户端会接管到音讯。
  2. 分组订阅:订阅前缀 $share/<group>/,组客户端订阅了$share/group1/topic$share/group2/topic..,发布者公布到 topic,则音讯会公布到每个 group 中,然而每个 group 中只有一个客户端会接管到音讯。

留神: 如果 topic/ 结尾,例如:/topic/test,须要订阅 $share/group1//topic/test

五、疾速接入

Spring boot 我的项目

客户端:

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

客户端配置:

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
    clientId: 000001            # 客户端 Id(十分重要,个别为设施 sn,不可反复)user-name: mica             # 认证的用户名
    password: 123456            # 认证的明码
    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 明码

订阅示例:

@Service
public class MqttClientSubscribeListener {private static final Logger logger = LoggerFactory.getLogger(MqttClientSubscribeListener.class);

    @MqttClientSubscribe("/test/#")
    public void subQos0(String topic, byte[] payload) {logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
    }

    @MqttClientSubscribe(value = "/qos1/#", qos = MqttQoS.AT_LEAST_ONCE)
    public void subQos1(String topic, byte[] payload) {logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
    }

    @MqttClientSubscribe("/sys/${productKey}/${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));
    }

}

服务端:

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-server-spring-boot-starter</artifactId>
  <version>${mica-mqtt.version}</version>
</dependency>

客户端配置:

mqtt:
  server:
    enabled: true               # 是否开启服务端,默认:true
#    ip: 0.0.0.0                # 服务端 ip 默认为空,0.0.0.0,倡议不要设置
    port: 1883                  # 端口,默认:1883
    name: Mica-Mqtt-Server      # 名称,默认:Mica-Mqtt-Server
    buffer-allocator: HEAP      # 堆内存和堆外内存,默认:堆内存
    heartbeat-timeout: 120000   # 心跳超时,单位毫秒,默认: 1000 * 120
    read-buffer-size: 8KB       # 接收数据的 buffer size,默认:8k
    max-bytes-in-message: 10MB  # 音讯解析最大 bytes 长度,默认:10M
    auth:
      enable: false             # 是否开启 mqtt 认证
      username: mica            # mqtt 认证用户名
      password: mica            # mqtt 认证明码
    debug: true                 # 如果开启 prometheus 指标收集倡议敞开
    stat-enable: true           # 开启指标收集,debug 和 prometheus 开启时须要关上,默认开启,敞开节俭内存
    web-port: 8083              # http、websocket 端口,默认:8083
    websocket-enable: true      # 是否开启 websocket,默认:true
    http-enable: false          # 是否开启 http api,默认:false
    http-basic-auth:
      enable: false             # 是否开启 http basic auth,默认:false
      username: mica            # http basic auth 用户名
      password: mica            # http basic auth 明码
    ssl:                        # mqtt tcp 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 明码
      client-auth: none         # 是否须要客户端认证(双向认证),默认:NONE(不须要)

非 Spring boot 我的项目

客户端:

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-client</artifactId>
  <version>${mica-mqtt.version}</version>
</dependency>

服务端:

<dependency>
  <groupId>net.dreamlu</groupId>
  <artifactId>mica-mqtt-server</artifactId>
  <version>${mica-mqtt.version}</version>
</dependency>

六、应用文档和示例

  • mqtt 科普、mqttx、mica-mqtt 的应用 视频
  • mica-mqtt-client 应用文档
  • mica-mqtt-server 应用文档
  • mica-mqtt-client-spring-boot-starter 应用文档
  • mica-mqtt-server-spring-boot-starter 应用文档
  • mica-mqtt http api 文档详见
  • mica-mqtt 发行版本记录

正文完
 0