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 遗嘱消息。
支持 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 客户端
2.2.5 - 2023-10-05
✨ mqtt 业务线程池支持自定义设置为 java21虚拟线程。
✨ 更新 GitHub action,java17 改为 java21。
✨ ThreadUtil 弃用(暂时未删),切换到 mica-net 中的 ThreadUtils。
发布了快一个月了,终于抽出时间发更新记录,工作忙碌加上2个崽,精力真是大不如从前。
重要说明:mica-mqtt client 中默认的业务线程数是 2,考虑到大部分 client 不会用来处理特别密集的消息。
如果你的业务,client 要处理大量的消息、业务处理耗时比较长,或者发现 mica-mqtt client 有消息延迟或者内存开始增长。可以自定义线程池来提高线程数,来解决这种问题。
普通 Java 配置方式:
// 初始化 mqtt 客户端
MqttClient client = MqttClient.create()
.ip("127.0.0.1")
.port(1883)
.username("admin")
.password("******")
// 设置业务线程数,请自行按需配置,一般可以简单按 cpu 核数 * 2来配置
.mqttExecutor(ThreadUtils.getBizExecutor(10))
.connect();
Spring boot stater 接入配置:
@Configuration(proxyBeanMethods = false)
public class MqttClientCustomizerConfiguration {
@Bean
public MqttClientCustomizer mqttClientCustomizer() {
return creator -> {
// 设置业务线程数,请自行按需配置,一般可以简单按 cpu 核数 * 2来配置
creator.mqttExecutor(ThreadUtils.getBizExecutor(10));
};
}
}
如果你是使用的 Java21,需要处理的消息量很大,也可以将工作线程设置为虚拟线程。笔者采用虚拟线程模拟耗时进行压测实际处理速度提升非常明显(当然会消耗更多 CPU 和 内存)。
@Configuration(proxyBeanMethods = false)
public class MqttClientCustomizerConfiguration {
@Bean
public MqttClientCustomizer mqttClientCustomizer() {
return creator -> {
// 设置业务线程数,使用 java21 虚拟线程
creator.mqttExecutor(Executors.newVirtualThreadPerTaskExecutor());
};
}
}
mica-mqtt 服务端默认的业务线程数是 CPU 核心 2 倍(最小默认为 8),如果服务端也遇到上述业务处理耗时大、消息量大,导致的处理不赢,建议将消息转发到 kafka、rocketmq,然后将耗时的业务添加多个服务去消费 mq。
mqtt 科普、mqttx、mica-mqtt 的使用视频:https://b23.tv/VJ8yc7v
mica-mqtt快速开始:https://gitee.com/596392912/mica-mqtt