FolkMQ v1.2.0
更新说明
- 添加 协议版本的握手传递
- 添加 消息事务支持(即二段式提交),支持反向事务确认
- 添加 请求响应模式支持(即 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模式,消息属性),需要新版服务端和客户端支持。