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

原文始发于微信公众号(JAVA架构日记):mica-mqtt 2.2.5 发布,支持Java21虚拟线程

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/171410.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!