Skip to content

FolkMQ v1.2.2

Compare
Choose a tag to compare
@noear noear released this 27 Feb 06:05
· 370 commits to main since this release

更新说明(优化 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());

兼容说明

  • 本次更新,向下兼容。
  • 新增的功能功能(事务消息,发送与监听模式模式,消息属性),需要新版服务端和客户端支持。