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

您的位置:首頁技術(shù)文章
文章詳情頁

springboot整合rocketmq實現(xiàn)分布式事務(wù)

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

springboot整合rocketmq實現(xiàn)分布式事務(wù)

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

2 工程

springboot整合rocketmq實現(xiàn)分布式事務(wù)

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<>(); /** * 執(zhí)行業(yè)務(wù)邏輯 */ @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; /** * 發(fā)送消息 * */ 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('發(fā)送成功'); }}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 '發(fā)送成功'; }}2.7 RocketApplication

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

描述: 正常啟動及可。

springboot整合rocketmq實現(xiàn)分布式事務(wù)

springboot整合rocketmq實現(xiàn)分布式事務(wù)

3.2 回查代碼測試

描述: 執(zhí)行本地事務(wù)時添加異常,重啟測試,發(fā)現(xiàn)消費者沒有收到消息。

springboot整合rocketmq實現(xiàn)分布式事務(wù)

springboot整合rocketmq實現(xiàn)分布式事務(wù)

springboot整合rocketmq實現(xiàn)分布式事務(wù)

到此這篇關(guān)于springboot整合rocketmq實現(xiàn)分布式事務(wù)的文章就介紹到這了,更多相關(guān)springboot 分布式事務(wù)內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
尹人成人综合网| 久久精品理论片| 伊人久久国产| 国产一区二区三区日韩精品| 久久亚洲资源中文字| 91综合久久爱com| 日韩成人av影视| 欧美天堂在线| 久久精品午夜| 久久久久久网| 欧美性感美女一区二区| 欧美日韩中文一区二区| 国内精品福利| 亚洲福利久久| 午夜在线一区二区| 日韩福利视频一区| 国产精品18| 91麻豆国产自产在线观看亚洲| 日本一区二区高清不卡| 亚洲91久久| 国产视频一区三区| 色综合视频一区二区三区日韩| 欧美影院精品| 国产经典一区| 水蜜桃精品av一区二区| 四虎4545www国产精品 | 人人爱人人干婷婷丁香亚洲| 国产精品一页| 精品国产第一福利网站| 午夜精品免费| 日韩视频1区| 国产一区二区三区四区大秀| 久久精品国产大片免费观看| 亚洲精品第一| 国产精品自在| 成人一区而且| 玖玖精品视频| 欧美成a人片免费观看久久五月天| 91综合网人人| 中文日韩欧美| 久久国产精品免费一区二区三区| 97国产精品| 视频一区二区中文字幕| 国产精品对白| 久久精品高清| 青青伊人久久| 欧美成人a交片免费看| 亚洲国产综合在线看不卡| 免费不卡在线视频| 国产精品流白浆在线观看| 久久久久久久久久久9不雅视频| 中文一区一区三区免费在线观 | 丝瓜av网站精品一区二区| 亚州欧美在线| 国产高潮在线| 国产精品亚洲四区在线观看| 国产在线看片免费视频在线观看| 亚洲综合欧美| 国产一区二区三区四区五区| 伊人精品视频| 成年男女免费视频网站不卡| 欧美亚洲人成在线| 欧美中文一区二区| 国产欧美一区| 日韩视频一区| 精品视频一二| 99国产精品私拍| 欧美韩一区二区| 日韩专区在线视频| 成人片免费看| 国产亚洲字幕| 亚洲激情欧美| 国产拍在线视频| 欧美日本不卡高清| 国产中文一区| 精品午夜视频| 日韩激情一二三区| 国产99精品| 久久a爱视频| 天堂久久av| 久久精品国产大片免费观看| **爰片久久毛片| 久久亚洲图片| 激情偷拍久久| 激情视频网站在线播放色| 国产日产精品一区二区三区四区的观看方式| 欧美freesex黑人又粗又大| 国产日韩精品视频一区二区三区| 亚洲在线观看| 午夜精品成人av| 亚洲精品少妇| 色吊丝一区二区| 国产精品对白| 天堂va欧美ⅴa亚洲va一国产| 久久青草久久| 首页国产精品| 日本在线不卡视频一二三区| 一本一本久久| 久久国产日韩| 成人美女视频| 国产精品大片| 欧美午夜网站| 日韩av网站在线免费观看| 美女被久久久| 91精品婷婷色在线观看| 精品一区二区三区中文字幕视频| 日韩手机在线| 亚洲欧美在线专区| 亚洲精品1区2区| 精品在线99| 蜜乳av另类精品一区二区| 天堂中文av在线资源库| 国产一区二区三区日韩精品| 国产精品jk白丝蜜臀av小说| 欧美日韩18| 婷婷综合电影| 日韩av不卡在线观看| 欧美亚洲综合视频| 国产日韩欧美一区二区三区在线观看 | 亚洲高清久久| 999久久久国产精品| 国产欧洲在线| 美女毛片一区二区三区四区最新中文字幕亚洲 | 亚洲精品乱码久久久久久蜜桃麻豆| 国产国产精品| 婷婷成人基地| 国产亚洲高清视频| 亚洲精一区二区三区| 亚洲一区有码| 中文字幕免费精品| 日韩精品视频网站| 欧美日韩中出| 美女尤物国产一区| 国产精品不卡| 日韩欧美一区二区三区在线视频| 久久精品国产精品亚洲毛片| 久久一区亚洲| 免费在线小视频| 国产综合激情| 喷白浆一区二区| 日韩一区精品| 国产精品一区三区在线观看| 麻豆一区二区99久久久久| 精品午夜av| 欧美日韩色图| 亚洲青青久久| 久久不见久久见免费视频7| 亚洲一区资源| 亚洲女人av| 欧美久久香蕉| 国产精品久久观看| 欧美va亚洲va日韩∨a综合色| 久色成人在线| 一区二区精彩视频| 亚洲精品人人| 欧美亚洲三级| 久久激情综合网| 久久69成人| 欧美日韩色图| 日本综合精品一区| 精品精品国产三级a∨在线| 电影天堂国产精品| 狠狠爱成人网| 日本视频在线一区| 免费在线成人| 色一区二区三区四区| 亚洲午夜黄色| 亚洲日韩中文字幕一区| 麻豆久久久久久久| 蜜臀久久精品| 中文字幕亚洲在线观看| 久久超级碰碰| 亚洲天堂成人| 日韩国产欧美三级| 日韩大片在线观看| 免费久久精品视频| 国产一区二区三区精品在线观看| 精品日韩毛片| 国产伦一区二区三区| 久久免费高清| 久久一二三区| 精品精品国产三级a∨在线| 免费观看不卡av| 日韩一区二区三免费高清在线观看 | av中文资源在线资源免费观看| 国产亚洲网站| 国产精品流白浆在线观看| 伊人成人在线视频| 久久精品一区| 免播放器亚洲| 精品一区91| 中文字幕一区二区三区四区久久| 欧美国产不卡| 免费不卡在线观看| 国产美女高潮在线| 91亚洲精品在看在线观看高清| 日韩伦理在线一区| 欧美视频精品全部免费观看| 欧美不卡在线| 高清日韩中文字幕|