国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性

這篇具有很好參考價值的文章主要介紹了【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

org.springframework.boot

spring-boot-starter-amqp

mysql

mysql-connector-java

runtime

org.projectlombok

lombok

true

org.springframework.boot

spring-boot-starter-jdbc

com.alibaba

fastjson

1.2.17

3.2.1.2配置文件內(nèi)容:

server:

port:?8080

spring:

datasource:

driver-class-name:?com.mysql.cj.jdbc.Driver

url:?jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=true

username:?root

password:?root123

rabbitmq:

host:?localhost

port:?5672

username:?admin

password:?admin123

virtual-host:?/

#必須配置這個,生產(chǎn)者才會確認回調(diào)

publisher-confirm-type:?correlated

publisher-returns:?true

#重要,手動開啟消費者ACK,控制消息在MQ中的刪除、重發(fā)

listener:

simple:

acknowledge-mode:?MANUAL

3.2.2 訂單中心代碼

import?com.alibaba.fastjson.JSONObject;

import?lombok.extern.slf4j.Slf4j;

import?org.springframework.amqp.rabbit.connection.CorrelationData;

import?org.springframework.amqp.rabbit.core.RabbitTemplate;

import?org.springframework.beans.factory.annotation.Autowired;

import?org.springframework.jdbc.core.JdbcTemplate;

import?org.springframework.stereotype.Service;

import?javax.annotation.PostConstruct;

import?java.beans.Transient;

/**

*?@Author?Lee

*?@Description?訂單中心

*?@Date?2020/1/30?16:57

*?@Version?1.0

*/

@Slf4j

@Service

public?class?OrderService?{

@Autowired

private?JdbcTemplate?jdbcTemplate;

@Autowired

private?RabbitTemplate?rabbitTemplate;

@PostConstruct

public?void?setup(){

//消息發(fā)送完成后,則回調(diào)此方法,ack代表此方法是否發(fā)送成功

rabbitTemplate.setConfirmCallback(new?RabbitTemplate.ConfirmCallback(){

@Override

public?void?confirm(CorrelationData?correlationData,?boolean?ack,?String?cause)?{

//ack為true,代表MQ已經(jīng)準確收到消息

if(!ack){

return;

}

try{

String?sql?=?“update?tb_msgstatus?set?status?=?1?where?msgid?=??”;

int?count?=?jdbcTemplate.update(sql,correlationData.getId());

if(count?!=?1){

log.warn(“本地消息表狀態(tài)修改失敗”);

}

}catch?(Exception?e){

log.warn(“本息消息表狀態(tài)修改異?!?e);

}

}

});

}

/**

*?創(chuàng)建訂單信息

*?@param?order?訂單信息

*?@throws?Exception

*/

public?void?createOrder(JSONObject?order)?throws?Exception?{

//保存訂單信息

saveOrder(order);

//發(fā)送MQ消息,直接發(fā)送時不可靠,可能會失?。òl(fā)送后根據(jù)回執(zhí)修改狀態(tài)表,定時任務(wù)掃表讀取失敗數(shù)據(jù)重新發(fā)送)

sendMsg(order);

}

/**

*?發(fā)送訂單信息至MQ

*?@param?order?訂單信息

*/

private?void?sendMsg(JSONObject?order)?{

//發(fā)送消息到MQ,CorrelationData作用:當收到消息回執(zhí)時會帶上這個參數(shù)

rabbitTemplate.convertAndSend(“orderExchange”,“”,order.toJSONString(),new?CorrelationData((String)?order.get(“orderid”)));

}

/**

*?保存訂單信息

*?@param?order?訂單信息

*?@throws?Exception

*/

@Transient

private?void?saveOrder(JSONObject?order)?throws?Exception?{

String?sql?=?“insert?into?tb_order?(orderid,userid,goodsid,ordertime)?values?(??,???,???,?now())”;

//保存訂單信息

int?count?=?jdbcTemplate.update(sql,order.get(“orderid”),order.get(“userid”),order.get(“goodsid”));

if(count?!=?1){

throw?new?Exception(“訂單創(chuàng)建失敗”);

}

//保存消息發(fā)送狀態(tài)

saveLocalMsg(order);

}

/**

*?記錄消息發(fā)送狀態(tài)

*?@param?order?訂單信息

*?@throws?Exception

*/

private?void?saveLocalMsg(JSONObject?order)?throws?Exception?{

String?sql?=?“insert?into?tb_msgstatus?(msgid,msg,status,sendtime)?values?(??,???,?0?,?now())”;

//記錄消息發(fā)送狀態(tài)

int?count?=?jdbcTemplate.update(sql,order.get(“orderid”),order.toJSONString());

if(count?!=?1){

throw?new?Exception(“記錄消息發(fā)送狀態(tài)失敗”);

}

}

}

3.3 訂單中心測試

3.3.1 測試代碼

@Autowired

private?OrderService?orderService;

@Test

public?void?orderServiceTest()?throws?Exception?{

//生成訂單信息

JSONObject?orderinfo?=?new?JSONObject();

orderinfo.put(“orderid”,UUID.randomUUID().toString());

orderinfo.put(“userid”,UUID.randomUUID().toString());

orderinfo.put(“goodsid”,UUID.randomUUID().toString());

orderService.createOrder(orderinfo);

}

3.3.2 測試驗證結(jié)果

orderQueue消息隊列中已經(jīng)接收到數(shù)據(jù)

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq 【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

訂單表里的數(shù)據(jù)

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

狀態(tài)表數(shù)據(jù):

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

4、運單中心


4.1 運單中心分析

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

消費者收到消息進行處理,處理成功則發(fā)送ACK消息通知MQ清除該條記錄,否則通知MQ重發(fā)或者等待MQ自動重發(fā)。本地維護一個處理次數(shù),如果多次處理仍然失敗,則將該消息丟棄或者加入到死信隊列(DLQ)中。死信隊列中的數(shù)據(jù)可以人工干預(yù)。推薦Java精選公眾號,回復(fù)Java面試,獲取面試資料。

4.2 編寫代碼

import?com.alibaba.fastjson.JSONObject;

import?com.rabbitmq.client.Channel;

import?lombok.extern.slf4j.Slf4j;

import?org.springframework.amqp.rabbit.annotation.RabbitListener;

import?org.springframework.amqp.support.AmqpHeaders;

import?org.springframework.beans.factory.annotation.Autowired;

import?org.springframework.jdbc.core.JdbcTemplate;

import?org.springframework.messaging.handler.annotation.Header;

import?org.springframework.stereotype.Service;

import?java.beans.Transient;

import?java.io.IOException;

/**

*?@Author?Lee

*?@Description?運單系統(tǒng)

*?@Date?2020/1/30?21:58

*?@Version?1.0

*/

@Slf4j

@Service

public?class?DispatchService?{
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)Java工程師,想要提升技能,往往是自己摸索成長或者是報班學(xué)習(xí),但對于培訓(xùn)機構(gòu)動則幾千的學(xué)費,著實壓力不小。自己不成體系的自學(xué)效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年Java開發(fā)全套學(xué)習(xí)資料》,初衷也很簡單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時減輕大家的負擔。【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學(xué)習(xí)提升的進階課程,基本涵蓋了95%以上Java開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且會持續(xù)更新!

如果你覺得這些內(nèi)容對你有幫助,可以掃碼獲?。。。▊渥ava獲取)

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

最后

一次偶然,從朋友那里得到一份“java高分面試指南”,里面涵蓋了25個分類的面試題以及詳細的解析:JavaOOP、Java集合/泛型、Java中的IO與NIO、Java反射、Java序列化、Java注解、多線程&并發(fā)、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、數(shù)據(jù)結(jié)構(gòu)、算法、Elasticsearch 、Kafka 、微服務(wù)、Linux。

這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應(yīng)該起到不小的作用,所以今天想給大家分享一下。

【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性,程序員,分布式,rabbitmq

請注意:關(guān)于這份“java高分面試指南”,每一個方向?qū)n}(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析
《互聯(lián)網(wǎng)大廠面試真題解析、進階開發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲取!
va反射、Java序列化、Java注解、多線程&并發(fā)、JVM、Mysql、Redis、Memcached、MongoDB、Spring、Spring Boot、Spring Cloud、RabbitMQ、Dubbo 、MyBatis 、ZooKeeper 、數(shù)據(jù)結(jié)構(gòu)、算法、Elasticsearch 、Kafka 、微服務(wù)、Linux。

這不,馬上就要到招聘季了,很多朋友又開始準備“金三銀四”的春招啦,那我想這份“java高分面試指南”應(yīng)該起到不小的作用,所以今天想給大家分享一下。

[外鏈圖片轉(zhuǎn)存中…(img-yNUCgxDi-1712701157677)]

請注意:關(guān)于這份“java高分面試指南”,每一個方向?qū)n}(25個)的題目這里幾乎都會列舉,在不看答案的情況下,大家可以自行測試一下水平 且由于篇幅原因,這邊無法展示所有完整的答案解析
《互聯(lián)網(wǎng)大廠面試真題解析、進階開發(fā)核心學(xué)習(xí)筆記、全套講解視頻、實戰(zhàn)項目源碼講義》點擊傳送門即可獲?。?/strong>文章來源地址http://www.zghlxwxcb.cn/news/detail-850924.html

到了這里,關(guān)于【103期】RabbitMQ 實現(xiàn)多系統(tǒng)間的分布式事務(wù),保證數(shù)據(jù)一致性的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于RocketMQ實現(xiàn)分布式事務(wù)

    基于RocketMQ實現(xiàn)分布式事務(wù)

    在一個微服務(wù)架構(gòu)的項目中,一個業(yè)務(wù)操作可能涉及到多個服務(wù),這些服務(wù)往往是獨立部署,構(gòu)成一個個獨立的系統(tǒng)。這種分布式的系統(tǒng)架構(gòu)往往面臨著分布式事務(wù)的問題。為了保證系統(tǒng)數(shù)據(jù)的一致性,我們需要確保這些服務(wù)中的操作要么全部成功,要么全部失敗。通過使用

    2024年03月12日
    瀏覽(20)
  • 分布式系統(tǒng)面試全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事務(wù)+分布式鎖)

    分布式系統(tǒng)面試全集通第一篇(dubbo+redis+zookeeper----分布式+CAP+BASE+分布式事務(wù)+分布式鎖)

    什么是分布式 一個系統(tǒng)各組件分別部署在不同服務(wù)器。彼此通過網(wǎng)絡(luò)通信和協(xié)調(diào)的系統(tǒng)。 也可以指多個不同組件分布在網(wǎng)絡(luò)上互相協(xié)作,比如說電商網(wǎng)站 也可以一個組件的多個副本組成集群,互相協(xié)作如同一個組件,比如數(shù)據(jù)存儲服務(wù)中為了數(shù)據(jù)不丟失而采取的多個服務(wù)備

    2024年04月11日
    瀏覽(29)
  • 分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

    分布式系統(tǒng)概念和設(shè)計——(事務(wù)與并發(fā)控制)

    事務(wù)與并發(fā)控制 簡介 事務(wù)的目標是在多個事務(wù)訪問對象以及服務(wù)器面臨崩潰的情況下,保證所有由服務(wù)器管理的對象始終維持在一個一致的狀態(tài)上 事務(wù)是由客戶定義的針對服務(wù)器對象的一組操作,組成為一個不可分割的單元,由服務(wù)器執(zhí)行 服務(wù)器必須保證整個事務(wù)被執(zhí)行,

    2024年02月07日
    瀏覽(53)
  • RocketMQ分布式事務(wù) -> 最終一致性實現(xiàn)

    RocketMQ分布式事務(wù) -> 最終一致性實現(xiàn)

    · 分布式事務(wù)的問題常在業(yè)務(wù)與面試中被提及, 近日摸魚看到這篇文章, 闡述的非常通俗易懂, 固持久化下來我博客中, 也以便于我二刷 轉(zhuǎn)載源 : 基于RocketMQ分布式事務(wù) - 完整示例 本文代碼不只是簡單的demo,考慮到一些異常情況、冪等性消費和死信隊列等情況,盡量向可靠業(yè)務(wù)

    2024年02月15日
    瀏覽(29)
  • SpringCloudAlibaba集成RocketMQ實現(xiàn)分布式事務(wù)事例(一)

    SpringCloudAlibaba集成RocketMQ實現(xiàn)分布式事務(wù)事例(一)

    業(yè)務(wù)需求 用戶請求訂單微服務(wù) order-service 接口刪除訂單(退貨),刪除訂單時需要調(diào)用 account-service的方法給賬戶增加余額,一個典型的分布式事務(wù)問題。 代碼實現(xiàn) 事務(wù)消息有三種狀態(tài): TransactionStatus.CommitTransaction:提交事務(wù)消息,消費者可以消費此消息 TransactionStatus.Roll

    2024年02月13日
    瀏覽(19)
  • JAVA微服務(wù)分布式事務(wù)的幾種實現(xiàn)方式

    JAVA微服務(wù)分布式事務(wù)的幾種實現(xiàn)方式

    一致性(Consistency) :在分布式系統(tǒng)中所有的數(shù)據(jù)備份,在同一時刻都保持一致狀態(tài),如無法保證狀態(tài)一致,直接返回錯誤; 可用性(Availability):在集群中一部分節(jié)點故障,也能保證客戶端訪問系統(tǒng)并得到正確響應(yīng),允許一定時間內(nèi)數(shù)據(jù)狀態(tài)不一致; 分區(qū)容錯性(Partiti

    2024年02月12日
    瀏覽(20)
  • Spring Boot實現(xiàn)分布式事務(wù)的協(xié)調(diào)和管理

    在現(xiàn)代的分布式系統(tǒng)中,往往存在多個服務(wù)協(xié)同完成一個業(yè)務(wù)操作的情況。而在這種情況下,如何保證所有服務(wù)的數(shù)據(jù)一致性成為了一個重要的問題。Spring Boot作為一個流行的Java開發(fā)框架,提供了多種方法來實現(xiàn)分布式事務(wù)的協(xié)調(diào)和管理。本文將介紹一些常用的方式和技術(shù)來

    2024年02月08日
    瀏覽(23)
  • springboot dubbo seata nacos集成 分布式事務(wù)seata實現(xiàn)

    springboot dubbo seata nacos集成 分布式事務(wù)seata實現(xiàn)

    官網(wǎng):http://seata.io/zh-cn/docs/overview/what-is-seata.html Seata 是一款開源的分布式事務(wù)解決方案,致力于提供高性能和簡單易用的分布式事務(wù)服務(wù)。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務(wù)模式,為用戶打造一站式的分布式解決方案。 官網(wǎng);https://cn.dubbo.apache.org/zh-cn/overview/what/

    2024年02月13日
    瀏覽(28)
  • 實現(xiàn)聲明式鎖,支持分布式鎖自定義鎖、SpEL和結(jié)合事務(wù)

    實現(xiàn)聲明式鎖,支持分布式鎖自定義鎖、SpEL和結(jié)合事務(wù)

    目錄 2.實現(xiàn) 2.1 定義注解 2.2 定義鎖接口 2.3 鎖的實現(xiàn) 2.3.1 什么是SPI 2.3.2 通過SPI實現(xiàn)鎖的多個實現(xiàn)類 2.3.3 通過SPI自定義實現(xiàn)鎖 3.定義切面 3.1 切面實現(xiàn) 3.2 SpEL表達式獲取動態(tài)key 3.3 鎖與事務(wù)的結(jié)合 4.測試 4.1 ReentrantLock測試 4.2 RedissonClient測試 4.3 自定義鎖測試 5.尾聲 5.1 todo list

    2023年04月19日
    瀏覽(82)
  • 分布式:一文吃透分布式事務(wù)和seata事務(wù)

    分布式:一文吃透分布式事務(wù)和seata事務(wù)

    什么是事務(wù) 事務(wù)是并發(fā)控制的單位,是用戶定義的一個操作序列。 事務(wù)特性 原子性(Atomicity): 事務(wù)是數(shù)據(jù)庫的邏輯工作單位,事務(wù)中包括的諸操作要么全做,要么全不做。 一致性(Consistency): 事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。一致性

    2024年02月07日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包