南京尘帆网站建设,天津网站制作建设,网站服务器可以更换吗,上海大金空调网站建设FolkMQ 提供了二段式提交的事务提交的机制#xff08;TCC 模型#xff09;。允许生产者在发送消息时绑定到一个事务中并接收事务的管理#xff0c;以确保消息的原子性#xff08;要么全成功#xff0c;要么全失败#xff09;。在 FolkMQ 中#xff0c;事务是通过 MqTran…FolkMQ 提供了二段式提交的事务提交的机制TCC 模型。允许生产者在发送消息时绑定到一个事务中并接收事务的管理以确保消息的原子性要么全成功要么全失败。在 FolkMQ 中事务是通过 MqTransaction 接口实现管理的。一般是通过
新建事务在产生者端可以通过调用 MqTransaction tran client.newTransaction() 新建一个事务。后续的消息发送与此事务绑定。绑定的消息即参与此事务没绑定的消息则照旧。发送消息T接下来的事务中尝试发送消息。此时中间件会把消息放在一个事务中转队列里。提交事务C如果所有消息都发送成功了就通过 tran.commit() 方法提交事务。此时中间件把事务相关消息从事务中转队列取出并转到派发队列。回滚事务C通过 try catch如果有某一条消息发送异常了。就通过 tran.rollback() 方法回滚事务即所有消息全部取消。此时中间件把事务相关消息从事务中转队列删掉。
发送事务消息
//发送事务消息
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.publishAsync(demo, new MqMessage(demo3).attr(orderId,1).transaction(tran));client.publishAsync(demo, new MqMessage(demo4).attr(orderId,1).transaction(tran));tran.commit();
} catch (Throwable e) {tran.rollback();
}FolkMQ 的服务端事务处理是基于专属的事务中转队列实现支持快照持久化。它可以保证在事务中的消息要么全部成功要么全部失败。而且当客户端没有提交二次确认时偶尔会有网络原因超过60秒后会发起反向“回查”。要实现更“周密”的事务处理客户端还需要实现回查处理。一般在客户端初始化时或者连接建立后配置事务回查处理
MqClient client FolkMQ.createClient(folkmq://127.0.0.1:18602).nameAs(demoapp) //一般用当前应用名.connect();client.transactionCheckback(m-{if(1.equals(m.getAttr(orderId))) {m.acknowledge(true);}
});FolkMQ 的事务机制不会对性能有影响与非事务消息性能没什么差别。