FolkMQ 是怎样进行消息的事务处理?
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 的事务机制,并且不会对性能有影响,与非事务消息性能没什么差别。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
PowerJob v4.3.8 已经发布,分布式任务调度中间件
PowerJob v4.3.8 已经发布,分布式任务调度中间件 此版本更新内容包括: PowerJob 主框架 PowerJob 全体成员祝大家龙年腾飞,新的一年身体健康,万事如意,阖家欢乐,幸福安康! Features Map/MapReduce增强 性能优化:底层执行架构升级,通过 SWAP 置换支持千万/亿级子任务 策略优化:支持 TaskTracker 行为配置(任务配置-高级设置-TaskTracker 行为),新增主节点 PADDLING(划水)模式。启用后主节点只负责管理,不参与计算,稳定性最优。适用于节点数量非常多的大规模计算场景,少一个计算节点来换取稳定性提升。 运维增强:Map/MapReduce 类任务开放子任务查询功能,清晰追踪集群计算动态 调度策略增强:新增指定主节点(SPECIFY)模式。常用于 Map/MapReduce 等场景,大规模计算时,主节点部署/重启会导致任务完全失败,因此可为主节点搭建一个隔离环境,通过该参数指定主节点到该隔离环境运行,使其摆脱普通 worker 节点部署带来的影响。指定语法等同于“执行机器地址”的语法,填写 IP 或者 TAG...
- 下一篇
什么样才算好图——从生图模型质量度量方法看模型能力的发展
本文总结了近10年来的生图模型论文中用到的评价指标,并尝试解答两个问题 不同时期的评价标准都有哪些特点? 图片质量的评价如何辅助模型的迭代? 前言 随着各种文生图模型逐渐从toy project进入到生产链路,在线上实际落地并产生业务价值,同时自研/来源模型也进入了快速迭代的阶段。 一套直指问题、综合拓展性和复用性的评价指标变得尤为宝贵,从效果上来讲,如果说数据质量决定了模型效果的上限,那么指标的好坏直接决定了模型下限的位置。 2016年以前图像质量检测主要是在构建各种手动特征,最初图片质量是作为一个二类问题,后来根据不同的对象/场景衍生出多了分类的问题,2016年到2019年期间,GAN方法生成的图片越来越逼真,此时各家的指标更多的关注GAN生成图像和样本图像之间的差异以及生成图片的多样性(mode collapse)。 自2020年往后,transformor火遍机器学习圈,同时多模态大模型能力也越来越强,在图片美观度、真实度这种抽象的指标的评价在LLM上又有比较好的表现,同时因为zero-shot和few-shot的特性,在一些自定义的指标上LLM可以快速响应,对于使用方来说,这...
相关文章
文章评论
共有0条评论来说两句吧...