日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot整合rocketmq實現分布式事務

瀏覽:26日期:2023-03-08 14:54:37
目錄1 執行流程2 工程2.1 pom2.2 application.yml2.3 TransactionListenerImpl2.4 SpringTransactionProducer2.5 SpringTxConsumer2.6 ProducerController2.7 RocketApplication3 測試3.1 正常消費測試3.2 回查代碼測試1 執行流程

springboot整合rocketmq實現分布式事務

(1) 發送方向 MQ 服務端發送消息。(2) MQ Server 將消息持久化成功之后,向發送方 ACK 確認消息已經發送成功,此時消息為半消息。(3) 發送方開始執行本地事務邏輯。(4) 發送方根據本地事務執行結果向 MQ Server 提交二次確認(Commit 或是 Rollback),MQ Server 收到Commit 狀態則將半消息標記為可投遞,訂閱方最終將收到該消息;MQ Server 收到 Rollback 狀態則刪除半消息,訂閱方將不會接受該消息。(5) 在斷網或者是應用重啟的特殊情況下,上述步驟4提交的二次確認最終未到達 MQ Server,經過固定時間后MQ Server 將對該消息發起消息回查。(6) 發送方收到消息回查后,需要檢查對應消息的本地事務執行的最終結果。(7) 發送方根據檢查得到的本地事務的最終狀態再次提交二次確認,MQ Server 仍按照步驟4對半消息進行操作。

2 工程

springboot整合rocketmq實現分布式事務

2.1 pom

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent> <properties><java.version>1.8</java.version> </properties> <dependencies><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.71</version></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-collections4</artifactId> <version>4.2</version></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-spring-boot-starter --><dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.0.1</version></dependency><dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-client</artifactId> <version>4.3.2</version></dependency> </dependencies> <build><plugins> <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.3.0.RELEASE</version> </plugin> <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration> <source>1.8</source> <target>1.8</target></configuration> </plugin></plugins> </build>2.2 application.yml

rocketmq: name-server: 192.168.38.50:9876 producer: group: transcation-group2.3 TransactionListenerImpl

@RocketMQTransactionListener(txProducerGroup = 'transaction-producer-group')@Slf4jpublic class TransactionListenerImpl implements RocketMQLocalTransactionListener { private static Map<String, RocketMQLocalTransactionState> STATE_MAP = new HashMap<>(); /** * 執行業務邏輯 */ @Override public RocketMQLocalTransactionState executeLocalTransaction(Message message, Object o) {String transId = (String) message.getHeaders().get(RocketMQHeaders.TRANSACTION_ID);try { System.out.println('用戶A賬戶減500元.'); System.out.println('用戶B賬戶加500元.'); STATE_MAP.put(transId, RocketMQLocalTransactionState.COMMIT); return RocketMQLocalTransactionState.COMMIT;} catch (Exception e) { e.printStackTrace();}STATE_MAP.put(transId, RocketMQLocalTransactionState.ROLLBACK);return RocketMQLocalTransactionState.UNKNOWN; } /** * 回查 */ @Override public RocketMQLocalTransactionState checkLocalTransaction(Message message) {String transId = (String) message.getHeaders().get(RocketMQHeaders.TRANSACTION_ID);log.info('回查消息 -> transId ={} , state = {}', transId, STATE_MAP.get(transId));return STATE_MAP.get(transId); }}2.4 SpringTransactionProducer

@Component@Slf4jpublic class SpringTransactionProducer { @Autowired private RocketMQTemplate rocketMQTemplate; /** * 發送消息 * */ public void sendMsg(String topic, String msg) {Message<String> message = MessageBuilder.withPayload(msg).build();this.rocketMQTemplate.sendMessageInTransaction('transaction-producer-group', topic, message, null);log.info('發送成功'); }}2.5 SpringTxConsumer

@Component@RocketMQMessageListener(topic = 'pay_topic',consumerGroup = 'transaction-consumer-group',selectorExpression = '*')@Slf4jpublic class SpringTxConsumer implements RocketMQListener<String> { @Override public void onMessage(String msg) {log.info('接收到消息 -> {}', msg); }}2.6 ProducerController

@RestController@RequestMapping('/producer')public class ProducerController { @Autowired private SpringTransactionProducer springTransactionProducer; @GetMapping('/sendMsg') public String sendMsg() {springTransactionProducer.sendMsg('pay_topic', '用戶A賬戶減500元,用戶B賬戶加500元。');return '發送成功'; }}2.7 RocketApplication

@SpringBootApplicationpublic class RocketApplication { public static void main(String[] args) {SpringApplication.run(RocketApplication.class); }}3 測試3.1 正常消費測試

描述: 正常啟動及可。

springboot整合rocketmq實現分布式事務

springboot整合rocketmq實現分布式事務

3.2 回查代碼測試

描述: 執行本地事務時添加異常,重啟測試,發現消費者沒有收到消息。

springboot整合rocketmq實現分布式事務

springboot整合rocketmq實現分布式事務

springboot整合rocketmq實現分布式事務

到此這篇關于springboot整合rocketmq實現分布式事務的文章就介紹到這了,更多相關springboot 分布式事務內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
蜜臀av性久久久久蜜臀aⅴ流畅| 国产成年精品| 亚洲黑丝一区二区| 久久精品二区三区| 久久婷婷激情| 黄色av一区| 最新亚洲国产| 久久成人精品| 深夜福利一区| 国产精品一区高清| 激情久久一区二区| 日韩精品一区二区三区免费观影| 91精品啪在线观看国产18| 欧美 日韩 国产精品免费观看| 九色精品91| 亚欧洲精品视频在线观看| 日韩成人精品一区二区三区| 国产精品v一区二区三区| 国产一区丝袜| 91九色精品| 亚洲免费专区| 国产高清精品二区| 精品国产欧美日韩一区二区三区| 久久夜夜操妹子| 黄色在线一区| 欧美在线看片| 精品成av人一区二区三区 | av资源新版天堂在线| 欧美成人精品三级网站| 日韩网站在线| 国产欧美一区二区三区精品观看| 国产精品99在线观看| 亚洲高清久久| 午夜亚洲福利| 国产精品一在线观看| 成人精品视频| 久久国产88| 欧美激情福利| 韩日一区二区三区| 久久国产精品免费一区二区三区| 91亚洲一区| 亚洲少妇自拍| 国产精品jk白丝蜜臀av小说| 99久久亚洲精品| 久久国产视频网| 不卡视频在线| 久久不卡日韩美女| 黑丝一区二区三区| 国产精品毛片久久久| 神马午夜久久| 欧美日韩午夜| 国产一区亚洲| 国产欧美日韩精品高清二区综合区| 精品捆绑调教一区二区三区| 亚洲精品影院在线观看| 精品美女视频 | 午夜一级久久| 久久久免费人体| 亚洲作爱视频| 麻豆精品av| 国产模特精品视频久久久久| 日韩欧美中文字幕一区二区三区| 欧美二三四区| 久久黄色影视| 人人爽香蕉精品| 日韩伦理在线一区| 快she精品国产999| 中文字幕系列一区| 国产美女视频一区二区| 最新亚洲激情| 成人午夜毛片| 一区二区国产在线| 91精品国产乱码久久久久久久 | 精品国产三区在线| 三级久久三级久久久| 久久精品观看| 精品美女在线视频| 欧美日韩一区二区三区不卡视频| 亚洲欧洲日本mm| 日韩久久精品| 老鸭窝一区二区久久精品| 免费观看在线综合| 99精品在线| 精品一级视频| 久久国产人妖系列| 在线精品一区| 一区二区视频欧美| 久久精品一区二区不卡| 国产精品magnet| 日本不卡视频一二三区| 视频在线观看一区二区三区| 久久国产毛片| 日韩欧美中文| 欧美国产小视频| 国产精品一区二区三区av麻| 亚洲开心激情| 日韩中文字幕1| 午夜欧美精品| 久久影视一区| 婷婷成人在线| 日韩欧美一区二区三区在线观看| 国产精品麻豆久久| 国内自拍视频一区二区三区| 91福利精品在线观看| 亚洲另类av| 免播放器亚洲一区| 蜜臀av一区二区三区| 一区二区三区午夜视频| 国产精品社区| 视频一区二区欧美| 噜噜噜躁狠狠躁狠狠精品视频 | 国产精品99久久久久久董美香| 日韩精品欧美大片| 亚洲精品自拍| 日韩在线观看一区二区| 蜜臀av一区二区在线免费观看| 久久亚洲国产精品一区二区| 国产模特精品视频久久久久| 国产午夜精品一区二区三区欧美| 久久久夜精品| 午夜欧美精品| 久久午夜精品一区二区| 亚洲免费激情| 视频一区视频二区中文字幕| 男女激情视频一区| 亚洲无线观看| 欧美日韩一视频区二区| 国产乱码精品一区二区三区四区| 国产精品xvideos88| 国产日产精品_国产精品毛片 | 国产一区成人| 亚洲人成亚洲精品| 亚洲精品激情| 日韩精品视频一区二区三区| 1024精品久久久久久久久| 亚洲午夜精品久久久久久app| 国产伦精品一区二区三区视频 | 91久久亚洲| 免费日韩av片| 亚洲综合福利| 国产精品调教视频| 国产一区二区三区四区五区传媒| yellow在线观看网址| 成人国产精品一区二区免费麻豆| 日本美女一区| 丝袜a∨在线一区二区三区不卡| 亚洲精品黄色| 久久精品一区| 亚洲国产专区| 视频一区日韩精品| 欧美激情五月| 欧美成a人免费观看久久| 亚洲激情五月| 日韩精品导航| 日本不良网站在线观看| 亚洲欧美日韩专区| 国产精品一区二区中文字幕| 国产一区二区久久久久| 在线天堂中文资源最新版| 国产高潮在线| 欧美aa国产视频| 久久精品亚洲欧美日韩精品中文字幕| 国产精品久久久久蜜臀| 亚洲欧美一区在线| 亚洲开心激情| 国产成人免费视频网站视频社区| 亚洲午夜一级| 日韩高清不卡一区二区| 久久精品国产在热久久| se01亚洲视频 | 国产精品入口久久| 日韩精品首页| 视频精品一区二区| 国产精品毛片aⅴ一区二区三区| 欧美成人精品三级网站| 蜜桃视频在线观看一区| 久久精品国产99| 亚洲激精日韩激精欧美精品| 国产一精品一av一免费爽爽| 欧洲亚洲一区二区三区| 日韩精品视频网站| 国产一区二区三区四区大秀| 亚洲经典在线| 精品亚洲a∨一区二区三区18| 婷婷综合五月| 老司机免费视频一区二区三区| 欧美日韩精品免费观看视欧美高清免费大片| 丝袜美腿高跟呻吟高潮一区| 久久精品国产网站| 日韩精品一二三四| av资源中文在线天堂| 天海翼亚洲一区二区三区| 在线一区视频观看| 国产欧美日韩一区二区三区在线| 欧美不卡在线| 久久精品亚洲| 亚洲精品欧美| 亚洲第一精品影视| 精品黄色一级片| 少妇精品久久久一区二区三区|