首页 > 其他分享 >FolkMQ 是怎样进行消息的事务处理?

FolkMQ 是怎样进行消息的事务处理?

时间:2024-03-02 21:34:09浏览次数:27  
标签:事务 tran 事务处理 发送 client 消息 FolkMQ 怎样

FolkMQ 提供了二段式提交的事务提交的机制(TCC 模型)。允许生产者在发送消息时绑定到一个事务中并接收事务的管理,以确保消息的原子性(要么全成功,要么全失败)。在 FolkMQ 中,事务是通过 MqTransaction 接口实现管理的。一般是通过:

  1. 新建事务:在产生者端,可以通过调用 MqTransaction tran = client.newTransaction() 新建一个事务。后续的消息发送与此事务绑定。绑定的消息,即参与此事务;没绑定的消息,则照旧。
  2. 发送消息(T):接下来的事务中,尝试发送消息。此时,中间件会把消息放在一个事务中转队列里。
  3. 提交事务(C):如果所有消息都发送成功了,就通过 tran.commit() 方法提交事务。此时,中间件把事务相关消息从事务中转队列取出,并转到派发队列。
  4. 回滚事务(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 的事务机制,并且不会对性能有影响,与非事务消息性能没什么差别。

标签:事务,tran,事务处理,发送,client,消息,FolkMQ,怎样
From: https://www.cnblogs.com/noear/p/18049264

相关文章

  • 程序是怎样跑起来的第12章读书笔记
    第12章让计算机思考,程序就如同是计算机执行的各种指令罗列起来的文章。计算机内部的cpu,通过对该文章的内容进行解析和运行,来运至连接到计算机的各种外围设备就好作为工具的程序和为了思考的程序,程序的使用目的大致分为两类,一类是大家作为工具来使用,另一个目的则是程序来代替人类执......
  • 程序是怎样跑起来的第11章读书笔记
    第11章围绕硬件控制方法来展开,第一小节通过一个问题应用和硬件无关来阐述系统调用等原理,Windows提供了通过应用来间接控制硬件的方法。用操作系统提供的系统调用功能就可以实现对硬件的控制。在Windows系统中系统调用称为API,通过使用抽象的接口和标准的编程模型,应用程序可以与底......
  • 程序是怎样跑起来的第九章读书笔记
    第九章则告诉我们操作系统和应用的关系第九章分为五个小节来阐述首先介绍了操作系统的历史操作穷的发展是一个逐渐演讲的过程。早教操作系统主要关注于简单的任务调度和硬件管理。随着计算机技术的不断进步,操作系统的功能也变得越来越复杂、包括内存管理、进程管理、文件系统管理......
  • 程序是怎样跑起来的第七章读书笔记
    第七章围绕程序是在和的环境中运行的来展开介绍7.1告诉我们运行环境等于操作系统加组件,操作系统和硬件是运行环境的重要组成部分不同的操作系统和硬件组合可能会导致,软件在不同的环境中表现出不同的行为。Windows操作系统在一定程度上解决了CPU以外的硬件差异问题使得软件在不同......
  • 程序是怎样跑起来的第六章读书笔记
    第六章的主题是文件的压缩通过询问读者为什么文件可以压缩来展开文件压缩机制的讲解6.1我们可以了解到,文件是以字节为单位的保存,每个字节可以表示一个字符、一个数字或其他类型的数据。在文件系统中,文件的大小通常以字节为单位来衡量。通过对字节的读取和写入计算机可以实现对文件......
  • 程序是怎样跑起来的第三章读书笔记
    第三章主要讲了计算机进行小数运算时出错的原因包括3.1将0.1累加一百次也得不到十(首先书本中列举了一个计算机运算错误的例子,代码清单3-1的程序运行后显示器上显示的结果并不是10,程序没错计算器也没发生故障用这个角度展开了计算机是如何处理小数的)3.2用二进制表示小数(对整......
  • 程序是怎样跑起来的
    读完《程序是怎样跑起来的》第一章后,我对程序的运行原理有了更深入的理解。第一章写了CPU的内部结构{程序流程的示例}{CPU的四个组成部分},CPU是寄存器的集合体{汇编语言,机器语言以及CPU的内部寄存器},决定程序流程的程序设计,条件分支和循环机制{顺序执行,条件分支和循环,CPU运行时标......
  • 《程序是怎样跑起来的》第十一章读后感
    《程序是怎样跑起来的》第十一章深入探讨了并发与并行的概念及其在程序执行中的应用。本章首先解释了并发和并行的区别,指出并发是多个任务交替执行,而并行是多个任务同时执行。接着,介绍了常见的并发模型和并行计算的方法,如多线程、多进程和分布式计算等技术,并强调了如何避免并发和......
  • 《程序是怎样跑起来》第六章读后感
    通过阅读第六章,我们和作者深入了解和探究了核心机制,包括程序的编译与执行过程、操作系统的角色以及内存管理等关键概念。这一章节不仅介绍了这些概念的理论基础,还通过具体的例子和类比,帮助我们更好地理解程序是如何在计算机中运行的。在这一章所讲述的程序运行机制对我启发很大。......
  • 阅读《程序是怎样运行的》第十章
    第十章通过汇编语言了解程序的实际构成。首先本地代码的指令中,表示其功能的英语缩写称为助记符。汇编语言是通过利用助记符来记述程序的;其次汇编语言的源代码转换成本地代码的方式称为汇编。使用汇编器这个工具来进行汇编;接着本地代码转换成汇编语言的源代码的方式称为反汇编。通......