简介
- 采用 “单线程” + “多路复用” + "内存运行" + "快照持久化" + "Broker 集群模式"(可选)
- 基于 Socket.D 网络应用协议 开发。全新设计,自主架构!
角色 | 功能 |
---|---|
生产端 | 发布消息(Qos0、Qos1)、定时消息(Qos0、Qos1)、可过期消息(Qos0、Qos1) |
消费端 | 订阅、取消订阅 |
消费端 | 消费-ACK(自动、手动) |
服务端 | 发布-Confirm、订阅-Confirm、取消订阅-Confirm、派发-Retry、派发-Delayed |
服务端 | 内存运行、快照持久化(自动、停机、手动) |
服务端 | 集群热扩展、集群高可用 |
特点
- 高吞吐量、低延迟
FolkMQ 纯内存运行,每秒能处理几十万条消息,最低延迟不到1毫秒。
- 可扩展性
FolkMQ Broker 集群支持 folkmq-server 节点热扩展。流量高时随时加,流量低时可减
- 持久性、可靠性
消息被快照持久化(类似于 redis)到本地磁盘,并且支持数据备份防止数据丢失
- 高可用
集群内任何节点坏掉只要还有“一个”同类节点,仍可提供服务
- 快(单机版,180K TPS)。
有点像 Redis 之于 MySql。
- 支持绝对顺序消息
通过配置实现
本次更新
- 服务端的消息主处理,改为单线程模式
向 redis 学习。消息的主处理,基本在内存里进行。所以改成单线程后,性能没啥变化。
- 添加 单机模式下绝对有序支持
//消息绝对有序配置支持(发送有序,接收有序)
MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:18601?ak=ak1&sk=sk1",
"folkmq://127.0.0.1:18602?ak=ak1&sk=sk1")
.config(c->c.sequenceMode(true).coreThreads(1).maxThreads(1))
.connect();
- 添加 集群安全停止支持。实现一端停止,另一端完全无感知(不异常,不卡顿)
新的高可用演示视频:https://www.bilibili.com/video/BV1Ha4y1R73b/
- 添加 管理接口支持
//管理接口,一般用于用户自己开发管理界面,通过接口管理 FolkMQ
String json = client.call(MqApis.MQ_QUEUE_VIEW_MESSAGE, token, "demo","demoApp").get();
代码仓库
- https://gitee.com/noear/folkmq
- https://github.com/noear/folkmq
官网
- https://folkmq.noear.org