事务消息的实现|学习笔记

简介: 快速学习事务消息的实现

开发者学堂课程【RocketMQ知识精讲与项目实战(第一阶段)事务消息的实现】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/702/detail/12389


事务消息的实现

 

内容介绍:

一、创建生产者和消费者

二、设置监听器

三、执行三种情况

 

一、创建生产者和消费者

通过代码将事务消息实现,先将生产者和消费者先创建出来,然后在 producer 中创建 TransactionMQproducer 也就是事务的消息生产者。

//1.创建消息生产者 producer,并制定生产者组名

DefaultMQProducer producer = new DefaultMQProducer("group1");

//2.指定 Nameserver.地址producer.setNamesrvAddr(“192.168.25.135:9876;192.168.25.138:9876");

//3.启动 producer

producer.start();

for (int i =0; i <10; i++) {

//4.创建消息对象,指定主售 Topic、Tag 和消息体

/**

*参数一,消息主心 Topic

*参数二:消息 Tag

*参数三:消息内

*/

image.png

Message msg = new Message( topic: "base", taqs: "Tag1",(“Hello World"+i).getBytes());

//5.发送消

SendResult result=producer.send(msg);

//发送状态

Sendstatus status = result.getsendstatus(); System.out.println(“发送结果:"+result);

//线程1秒

TimeUnit.SECONDS.sleep(1);

)

//6.关闭生产者 producer

producer,shutdown();

 

二、设置监听器

启动之前要设置消息事务的监听器,因此要添上这一部分:

(TransactionMQProducer) producer).setTransactionListener();

在流程中第二步消息MQ接收到半消息之后,就可以执行本地事务了,而告诉是提

交还是回滚需要一个入口,所以这个监听器也就是处理本地事务的一个入口。

//加事务监听器

producer.setTransactionListener(new TransactionListener(){

/**

*方法中执行本地事务

*@param msg

*@param arg*

*@return

*/

@Override

public LocalTransactionstate execute falTransaction(Message msg, object arg

}

return null;}

/**

*@param msg

*@return

*/

@Override

publicLocalTransactionstate checkLocalTransaction(Messageext msg) {

return null;

}

});

//3.启动producer

Producer.start();

在启动消费者之前,要先构建消息对象,将topic改为

transactiontopic,发送消息也需要一并修改。

 

三、执行三种情况

举例设置三个不同的tag消息“taga”,”tagb“,”tagc”,在执行本地事务处设

置一个判断:有提交、回滚、不做处理三个情况

publicLocalTnansactionstate executelocalTransaction(Message msg, Object arg) {

If(StringUtils.equals("TAGA",msg.getTags())){

return localTransactionstate.COMMIT MESSAGE;

}else if(stringutils.equals(“TAGB",msg.getTags())){

return LocalTransactionState.ROLLBACK_MESSAGE;

}else if(stringutils.equals(“TAGc",msg.getTags())){

return LocalTransactionState.UNKNOW;

return LocalTransactionState.UNKNON;

}

/**

*@param msg

*@return

*/

@Override

public LocalTransactionstate checkLocalTransaction(MessageExt msg){

return null;

}

});

producer.start();

如果MQ没有收到消息的回查,则有:

public LocalTransactionState checkLocalTransacti(MessageExt msg){

System.out.println("消息的Tag:"+msg.getTags()); 

return LocalTransactionState.COMMIT_MESSAGE;

}

在消费者这边,同样要保持主题是一样的,启动生产者和消费者。与原来的区别就是要创建事务的生产者。

相关文章
|
搜索推荐 UED
ChatGPT的推理过程
【1月更文挑战第8天】ChatGPT的推理过程
424 3
ChatGPT的推理过程
|
移动开发 开发框架 小程序
|
10月前
|
消息中间件 安全 Java
VCTGO:一款让开发者直呼“真香”的企业级快速开发平台,你绝对不能错过!
嗨,大家好,我是小华同学。关注我们获取“最新、最全、最优质”的开源项目和高效工作学习方法。今天为大家介绍一款企业级快速开发平台——VCTGO。基于Spring Boot + Vue.js,VCTGO提供用户管理、菜单管理、角色管理、日志管理、代码生成、系统监控等核心功能,支持从开发到部署的一站式解决方案。技术架构采用主流技术栈,包括前端Vue.js + Element UI,后端Spring Boot + MyBatis Plus,数据库MySQL,缓存Redis,消息队列RabbitMQ,
316 27
|
存储 数据可视化 BI
如何提升项目管理效率?2024年最受欢迎的团队管理软件对比评测
本文介绍了8款适合远程团队使用的团队管理软件,包括板栗看板、Monday.com、ClickUp、Basecamp、Notion、Slack、Zoho Projects和Teamwork。这些工具各有特色,如板栗看板适合中文环境下的远程团队,Monday.com强调高度可视化的管理,ClickUp则提供全面的任务和项目管理功能。选择合适的软件能显著提高远程团队的工作效率,促进项目顺利进行。
如何提升项目管理效率?2024年最受欢迎的团队管理软件对比评测
|
定位技术 开发工具
openGPS.cn - 基于ip的定位技术分享,高精度IP定位
利用业余时间自己做了个网站,集成了几个第三方数据源,对比IP地址查询的功能: 普通IP定位:https://www.opengps.cn/Data/IP/IPSearch.aspx 高精度IP定位:https://www.opengps.cn/Data/IP/IPHighAccuracy.aspx 其中,高精度IP定位为百度提供的服务,个人理解其工作原理应当是: 1,用户手机里
7358 1
【原创】java 获取十个工作日之前或之后的日期(算当天)-完美解决-费元星
【原创】java 获取十个工作日之后的日期(算当天)-完美解决-费元星(仅考虑星期六星期天) /** * * 根据开始日期 ,需要的工作日天数 ,计算工作截止日期,并返回截止日期 * @param startDate 开始日期 * @param workDay 工作日天数(周一到周五) ...
2413 0
|
JavaScript
点击按钮切换div及其内容(两种方法:Vue指令方式、原生DOM操作方式
点击按钮切换div及其内容(两种方法:Vue指令方式、原生DOM操作方式
1485 0
点击按钮切换div及其内容(两种方法:Vue指令方式、原生DOM操作方式
EMQ
|
消息中间件 监控 安全
EMQX 4.x 版本更新:Kafka 与 RocketMQ 集成安全增强
云原生分布式物联网接入平台EMQX此次发布包含多个功能更新:规则引擎RocketMQ支持ACL检查、Kafka支持SASL/SCRAM与SASL/GSSAPI认证以适配更多部署方式,提升MQTT共享订阅性能。
EMQ
592 0
EMQX 4.x 版本更新:Kafka 与 RocketMQ 集成安全增强
|
人工智能 运维 监控
从维护性工作到软件开发革命,运维 15 年间的大逆转
在 InfoQ 成立 15 周年之际,InfoQ 编辑部发起了“2007-2022:云、运维、架构、前端的 15 年演进史”特别策划,将和业内专家共同盘点云计算、运维、架构、前端四大技术领域的演进历史,试图从几个切面窥见 IT 技术的演进规律。本文是运维篇。
945 0
从维护性工作到软件开发革命,运维 15 年间的大逆转
|
Rust 安全 Java
史上最轻量​!阿里新型单元测试Mock工具开源了
为了探索更轻量易用的Mock测试手段,阿里云云效团队尝试给工具减负,在主流Mock工具的基础上让Mock的定义和置换干净利落,最终设计了一款极简风格的测试辅助工具TestableMock,无需初始化,不挑测试框架,无论要换的是私有方法、静态方法、构造方法还是其他任何类的任何方法,也无需关注要换的对象是怎么创建的,只要写好Mock定义,加个@MockMethod注解,就能统统搞定。本文分享TestableMock的实现原理。
史上最轻量​!阿里新型单元测试Mock工具开源了