一、简介
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个崽,精力真是大不如从前。
五、自定义业务线程池
5.1 mica-mqtt-client 更改业务线程数
重要说明: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());
};
}
}
5.2 mica-mqtt 服务端配置
mica-mqtt 服务端默认的业务线程数是 CPU 核心 2 倍(最小默认为 8),如果服务端也遇到上述业务处理耗时大、消息量大,导致的处理不赢,建议将消息转发到 kafka、rocketmq,然后将耗时的业务添加多个服务去消费 mq。
六、使用文档
-
mqtt 科普、mqttx、mica-mqtt 的使用视频:https://b23.tv/VJ8yc7v -
mica-mqtt快速开始:https://gitee.com/596392912/mica-mqtt
原文始发于微信公众号(JAVA架构日记):mica-mqtt 2.2.5 发布,支持Java21虚拟线程
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/171410.html