mica-mqtt 2.2.5 发布,支持Java21虚拟线程

一、简介

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

你可能感兴趣的:(物联网,IT行业,mica-mqtt,MQTT,JAVA)