20 Star 250 Fork 54

noear / folkmq

2024-06-03 14:50
15535 noear admin 1683858335 西东

一、更新说明

  • 新增 folkmq-embedded (带控制台的"内嵌版")
  • 新增 folkmq.js(浏览器版)
  • 添加 server-broker 的 folkmq.maxConsumeWaiting 配置支持
  • 优化 server-broker 许可证配置改为可视界面
  • 优化 强制派送条件,对正在派发中或超过1次的消息有效(之前为2次)
  • 优化 强制派空处理
  • socket.d 升为 2.5.3

二、兼容说明

  • 本次更新,向下兼容。
最后提交信息为: 优化控制台的版本号样式
2024-05-27 15:54
15535 noear admin 1683858335 西东

一、更新说明

  • 优化 消息事务增加对“延时消息”、“时效消息”支持
  • 修复 "Qos0消息"、"广播消息" 失效的问题(1.5.0 出现的)

二、兼容说明

  • 本次更新,向下兼容。其中 "fokmq:ws" 增加了子协议验证,需要同时升级客户端与服务端
最后提交信息为: 1.5.1
2024-05-24 21:44
15535 noear admin 1683858335 西东

一、更新说明

  • 新增 广播消息
  • 添加 后台强制清空 操作
  • 添加 "fokmq:ws" 适配 websocket 子协议验证(避免乱连)
  • 添加 "server-broker" 后台集群节点(内存用率)
  • 优化 异步消息发送端的内存控制
  • 优化 客户端锁处理(无锁改为顺序锁)
  • sokcet.d 升为 2.5.1

二、兼容说明

  • 本次更新,向下兼容。其中 "fokmq:ws" 增加了子协议验证,需要同时升级客户端与服务端。
最后提交信息为: Update README.md
2024-05-17 14:46
15535 noear admin 1683858335 西东

一、更新说明

  • 添加 基于内存的限流支持客户端
  • 修复 动态计数失真的问题
  • 优化 后台发送消息时,如果没有主题。提示失败
  • sokcet.d 升为 2.4.18

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: Update LOG.md
2024-05-16 17:36
15535 noear admin 1683858335 西东

一、更新说明

  • 增加 基于内存的限流控制
  • sokcet.d 升为 2.4.17

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.5
2024-05-13 08:26
15535 noear admin 1683858335 西东

一、更新说明

  • 增加 folkmq:wss:// 协议头支持
  • 增加 与小程序的兼容性
  • sokcet.d 升为 2.4.16

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.4
2024-04-30 22:36
15535 noear admin 1683858335 西东

一、更新说明

  • 新增 python client sdk
  • 添加 客户端虚拟命名空间支持
  • sokcet.d 升为 2.4.14

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.3
2024-04-13 08:32
15535 noear admin 1683858335 西东

一、更新说明

  • 添加 自定义 tid(key) 支持(之前自动生成)
  • 优化 Server 预关闭支持
  • sokcet.d 升为 2.4.10

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.2
2024-03-29 14:32
15535 noear admin 1683858335 西东

一、更新说明

  • 修复 客户端不能自动重连的问题(因服务端重启)

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.1
2024-03-28 19:41
15535 noear admin 1683858335 西东

一、更新说明

  • 添加 PackagingLoopImpl 新的构造函数
  • 添加 外部配置文件加载支持
  • 添加 消息二进制数据支持
  • 添加 顺序消息分片支持(在集群下才有效)
  • 优化 顺序消息没有消费者时 server 端 cpu 过高的问题
  • 优化 企业版授权控制
  • sokcet.d 升为 2.4.8

新特性演示:

//二进制支持
client.publish("demo", new MqMessage("helloworld!".getBytes(StandardCharsets.UTF_8)));

//顺序消息分片支持(用于集群分散处理)
client.publish("demo", new MqMessage("helloworld!").sequence(true, "sharding-1"));

二、兼容说明

  • 本次更新,向下兼容。新功能需要新的版本支持
最后提交信息为: 1.4.0
2024-03-21 17:23
15535 noear admin 1683858335 西东

一、更新说明

  • 调整 控制台发布消息后保持在原界面
  • 调整 添加流转批小工具
  • sokcet.d 升为 2.4.7

二、兼容说明

  • 本次更新,向下兼容。
最后提交信息为: Update pom.xml
2024-03-05 12:41
15535 noear admin 1683858335 西东

一、更新说明

  • 调整 docker 基础镜像改为:adoptopenjdk/openjdk11-openj9 (内存省一半)
  • 调整 folkmq-broker 更名为:folkmq-server-broker (相互兼容,体验不变)
  • 优化 顺序消息的消费逻辑(改为串行消费),更适合数据库有序同步之类的场景

二、兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: README
2024-03-03 13:16
15535 noear admin 1683858335 西东

一、更新说明

  • 完善 许可证本地处理机制(基于rsa签名机制)

二、兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.3.0
2024-03-01 14:58
15535 noear admin 1683858335 西东

一、更新说明

  • 添加 folkmq-server 对 ws 输传协议的支持(方便 js 客户端使用)

新功能演示:

docker run -p 18602:18602 -p 8602:8602 -e folkmq.schema='sd:ws' noearorg/folkmq-server:1.2.4
const {FolkMQ} = require("@noear/folkmq");

async function main() {
    //创建客户端,并连接
    const client = await FolkMQ.createClient("folkmq:ws://127.0.0.1:18602")
                            .nameAs("demoapp")
                            .connect();

    //订阅主题,并指定加入的消费者分组
    client.subscribe("demo", null, true, message => {
        console.log(message);
    });

    //发布消息
    client.publish("demo", FolkMQ.newMqMessage("helloworld!"));
}

main();

二、兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.2.4
2024-02-29 17:47
15535 noear admin 1683858335 西东

一、更新说明

(1) for Java

  • 添加 rpc 异常传导机制

(2) for JavaScript

  • 完成 js 客户端开发(兼容:浏览器,uni-app,node.js)

(3) 新功能演示

  • 事务消息 for js:
//准备(1.取名字;2.添加事务回查)
const client = await FolkMQ.createClient("folkmq:ws://127.0.0.1:18602")
    .nameAs("demoapp") //一般用当前应用名
    .connect();

//用于服务端发起的事务回查
client.transactionCheckback(m => {
  //极端特殊的情况下,客户端未完成事务确认。由服务端发起补尝确认
  if("1" == m.getAttr("orderId")) {
      //一般这里,需要查询数据库之类的
      m.acknowledge(true);
  }
});
    
//发送事务消息    
const tran = client.newTransaction();

try {
    client.publish("demo", FolkMQ.newMessage("demo1").attr("orderId","1").transaction(tran));
    client.publish("demo", FolkMQ.newMessage("demo2").attr("orderId","1").transaction(tran));
    client.publish("demo", FolkMQ.newMessage("demo3").attr("orderId","1").transaction(tran));
    client.publish("demo", FolkMQ.newMessage("demo4").attr("orderId","1").transaction(tran));

    tran.commit();
} catch (err) {
    tran.rollback();
}
  • 发送与监听模式模式 - rpc for js:
//客户端1
const client1 = await FolkMQ.createClient("folkmq:ws://127.0.0.1:18602")
                        .nameAs("demoapp1")
                        .connect();

//客户端1监听
const router = FolkMQ.newRouter(m => m.getTag()).doOn("/hello", req => {
    req.respone(SocketD.newEntity("me to!"));
});
client1.listen(router.consume.bind(router));


//客户端2
const client2 = await FolkMQ.createClient("folkmq:ws://127.0.0.1:18602")
                        .nameAs("demoapp2")
                        .connect();

//客户端2发送
const resp = client2.send(FolkMQ.newMessage("helloworld!").tag("hello"), "demoapp1").await();
console.log(resp.dataAsString());

二、兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.2.3
2024-02-27 14:07
15535 noear admin 1683858335 西东

更新说明(优化 rpc 接口体验;强化 trans 概念)

  • 调整 response 拆分为:transactionCheckback 和 listen
  • 调整 request 改为 send
  • 添加 transactionCheckback 用于响应服务端的事务回查
  • 添加 listen 和 send 配套接口
  • 添加 后台图标
  • 完善 许可证本地处理机制
  • sokcet.d 升为 2.4.4

新功能示例(事务消息):

//准备(1.取名字;2.添加事务回查)
MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demoapp") //一般用当前应用名
    .connect();

//用于服务端发起的事务回查
client.transactionCheckback(m->{
  if (m.isTransaction()) {
      //极端特殊的情况下,客户端未完成事务确认。由服务端发起补尝确认
      if("1".equals(m.getAttr("orderId"))) {
          //一般这里,需要查询数据库之类的
          m.acknowledge(true);
      }
  }
});
    
//发送事务消息    
MqTransaction tran = client.newTransaction();

try {
    client.publish("demo", new MqMessage("demo1").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo2").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo3").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo4").attr("orderId","1").transaction(tran));

    tran.commit();
} catch (Throwable e) {
    tran.rollback();
}

新功能示例(发送与监听模式模式 - rpc):

//客户端1
MqClient client1 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
                        .nameAs("demoapp1")
                        .connect();

//客户端1监听
client1.listen(new MqRouter(m -> m.getTag()).doOn("hello", request -> {
    System.out.println(request);
    request.acknowledge(new StringEntity("me to!"));
}));


//客户端2
MqClient client2 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
                        .nameAs("demoapp2")
                        .connect();

//客户端2发送
Reply reply = client2.send(new MqMessage("helloworld!").tag("hello"), "demoapp1").await();
System.out.println(reply.dataAsString());

兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.2.2
2024-02-23 16:05
15535 noear admin 1683858335 西东

本次版本发布,增加了"事务消息"、"消息属性"、"请求与响应模式(rpc)" 的支持。

更新说明

  • 添加 协议版本的握手传递
  • 添加 消息事务支持(即二段式提交),支持反向事务确认
  • 添加 请求响应模式支持(即 rpc 模式)
  • 添加 消息用户属性支持
  • 优化 内存占用与快照大小
  • 优化 安全停止延时改为4秒
  • 优化 客户端相关参数校验
  • 优化 客户端的心跳间隔为6秒
  • 优化 停止打印信息
  • sokcet.d 升为 2.4.3

新功能示例(事务消息):

//准备(1.取名字;2.添加响应实现)
MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demoapp") //一般用当前应用名
    .connect();

//用于响应服务端发起的反向确认
client.response(m->{
  if (m.isTransaction()) {
      //极端特殊的情况下,客户端未完成事务确认。由服务端发起补尝确认
      if("1".equals(m.getAttr("orderId"))) {
          //一般这里,需要查询数据库之类的
          m.acknowledge(true);
      }
  }
});
    
//发送事务消息    
MqTransaction tran = client.newTransaction();

try {
    client.publish("demo", new MqMessage("demo1").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo2").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo3").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo4").attr("orderId","1").transaction(tran));

    tran.commit();
} catch (Throwable e) {
    tran.rollback();
}

新功能示例(请求响应模式):

//客户端2
MqClient client1 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demo-app1") 
    .connect();

//要支持 rpc 响应,要添加响应实现(MqResponseRouter 带了主体路由功能)
client1.response(new MqResponseRouter().doOn("test.hello", m -> {
    m.acknowledge(true, new StringEntity(m.getSender() +  ": me to! rev: " + m.getContent()));
}));

//客户端2
MqClient client2 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demo-app2")
    .connect();

//发起请求并等响应,同步模式
Reply reply = client2.request("demo-app1", "test.hello", new MqMessage("hello")).await();
print(reply.dataAsString());

兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,RPC模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.2.1
2024-02-23 15:17
15535 noear admin 1683858335 西东

更新说明

  • 添加 协议版本的握手传递
  • 添加 消息事务支持(即二段式提交),支持反向事务确认
  • 添加 请求响应模式支持(即 rpc 模式)
  • 添加 消息用户属性支持
  • 优化 内存占用与快照大小
  • 优化 安全停止延时改为4秒
  • 优化 客户端相关参数校验
  • 优化 客户端的心跳间隔为6秒
  • 优化 停止打印信息
  • sokcet.d 升为 2.4.3

新功能示例(事务消息):

//准备(1.取名字;2.添加响应实现)
MqClient client = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demoapp") //一般用当前应用名
    .connect();

//用于响应服务端发起的反向确认
client.response(m->{
  if (m.isTransaction()) {
      //极端特殊的情况下,客户端未完成事务确认。由服务端发起补尝确认
      if("1".equals(m.getAttr("orderId"))) {
          //一般这里,需要查询数据库之类的
          m.acknowledge(true);
      }
  }
});
    
//发送事务消息    
MqTransaction tran = client.newTransaction();

try {
    client.publish("demo", new MqMessage("demo1").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo2").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo3").attr("orderId","1").transaction(tran));
    client.publish("demo", new MqMessage("demo4").attr("orderId","1").transaction(tran));

    tran.commit();
} catch (Throwable e) {
    tran.rollback();
}

新功能示例(请求响应模式):

//客户端2
MqClient client1 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demo-app1") 
    .connect();

//要支持 rpc 响应,要添加响应实现(MqResponseRouter 带了主体路由功能)
client1.response(new MqResponseRouter().doOn("test.hello", m -> {
    m.acknowledge(true, new StringEntity(m.getSender() +  ": me to! rev: " + m.getContent()));
}));

//客户端2
MqClient client2 = FolkMQ.createClient("folkmq://127.0.0.1:18602")
    .nameAs("demo-app2")
    .connect();

//发起请求并等响应,同步模式
Reply reply = client2.request("demo-app1", "test.hello", new MqMessage("hello")).await();
print(reply.dataAsString());

兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,RPC模式,消息属性),需要新版服务端和客户端支持。
最后提交信息为: 1.2.0
2024-02-08 12:26
15535 noear admin 1683858335 西东

更新说明

  • 调整 消息流处理改为单线程架构!
  • 添加 “绝对顺序”消息支持(同时支持单机模式与集群模式)!
  • 修复 客户端问题:同一个项目内,用不同的 consumerGroup 订阅同一个topic 会被覆盖的问题
  • sokcet.d 升为 2.4.0

新功能示例:

//同步
client.publish("demo", new MqMessage("hello").sequence(true)));
//异步
client.publishAsync("demo", new MqMessage("hello").sequence(true)));

兼容说明

本次更新,向下兼容。新增的顺序消息功能,需要新版服务端支持。

最后提交信息为: README
2024-02-06 10:15
15535 noear admin 1683858335 西东

更新说明:

  • 服务端的消息主处理,改为单线程模式

向 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();

兼容说明:

本次更新,向下兼容

最后提交信息为: 1.0.32
1
https://gitee.com/noear/folkmq.git
git@gitee.com:noear/folkmq.git
noear
folkmq
folkmq

搜索帮助