Seata使用

本文以seata-server-1.5.2,以配置中心、注冊中心使用Nacos,store.mode=db(mysql)為例進行操作。

一、Seata Server端
1、下載seata server
鏈接: http://seata.io/zh-cn/blog/download.html下載壓縮包,解壓至非中文目錄。

下載版本參考之前我們提到的:SpringBoot、SpringCloud、Spring Cloud Alibaba版本對照表選擇適合自己環境的版本。
本文版本環境:

Spring Cloud Alibaba 2021.0.4.0
Spring Boot 2.6.11
Nacos 2.2.1
Seata1.5.2

解壓后可以發現原來的conf/registry.conf配置文件沒有了,可直接修改application.yml進行配置。
在這里插入圖片描述

2、客戶端配置-application.yml
配置application.yml(低版本的是file.conf+registry.conf文件),主要配置config:配置中心部分及registry:注冊中心部分。

server:port: 7091spring:application:name: seata-server
# 日志配置
logging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seata# 不外接日志,故如下配置可暫不考慮extend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstash
# 新增加的console控制臺,
# 可通過訪問http://localhost:7091進行登錄,賬號如下seata/seata
console:user:username: seatapassword: seataseata:# Seata接入Nacos配置中心config:# support: file, nacos, consul, apollo, zk, etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189group: SEATA_GROUPusername: nacospassword: nacos##if use MSE Nacos with auth, mutex with username/password attribute#access-key: ""#secret-key: ""# Seata接入Nacos服務注冊中心registry:# support: file, nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189cluster: defaultusername: nacospassword: nacos##if use MSE Nacos with auth, mutex with username/password attribute#access-key: ""#secret-key: ""# 此處可不必配置,由于接入了nacos配置,以下store相關配置可直接通過seataServer.properties進行配置# store:# support: file 、 db 、 redis# mode: db
#  server:
#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

Tip:seata 版本客戶端和服務端最好還保持一樣

3、初始Mysql數據庫
新建seata庫->執行mysql.sql初始化腳本->【Seata 1.5版本mysql腳本】壓縮包目錄seata/script/db/mysql.sql
在這里插入圖片描述
4、導入初始配置到nacos
1)先任意模式啟動nacos,本文使用單機模式運行nacos。
win系統雙擊啟動文件即可
在這里插入圖片描述
Mac系統執行如下命令

moon@moondeiMac  ~  %  cd /Users/moon/Downloads/nacos-2.2.1/distribution/target/nacos-server-2.2.1/nacos/bin
moon@moondeiMac bin % sh startup.sh -m standalone

2)新建一個namespace用于本地開發使用eg:dev
在這里插入圖片描述
3)修改壓縮包目錄seata/script/config-center/config.txt文件中幾處內容:

# 存儲模式
store.mode=dbstore.db.datasource=druid
store.db.dbType=mysql
# 需要根據mysql的版本調整driverClassName
# mysql8及以上版本對應的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.jdbc.Driver
# 注意根據生產實際情況調整參數host和port
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
# 數據庫用戶名密碼
store.db.user=root
store.db.password=12345678
# 微服務里配置與這里一致
service.vgroupMapping.dev_tx_group=default

特別說明下:
配置事務分組service.vgroupMapping.dev_tx_group=default
dev_tx_group:需要與客戶端保持一致 ,可以自定義
default:需要跟客戶端和application.yml中的cluster保持一致
default 必須要等于 registry.conf cluster = “default”

4)官方推薦通過壓縮包目錄seatascript/config-center/nacos/nacos-config.sh將修改后的config.txt發布到nacos上

# 運行指令 ,通過 Git Bash Here
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 891d7906-dd03-4b8c-9fe9-a1f0609b3189# 具體說明參見:http://seata.io/zh-cn/docs/user/configurations.html
# -h: nacos host,默認localhost
# -p: nacos端口,默認8848
# -g: nacos分組,默認'SEATA_GROUP'.
# -t: 租戶信息Tenant information,對應nacos namespace ID,默認''
# -u: nacos用戶名,默認''
# -w: nacos用戶密碼,默認''

5)導入結果:

namespace: dev
group: SEATA_GROUP
配置項變成了N個,每項都可單獨修改。

在這里插入圖片描述
5、啟動測試
進入seata/bin 目錄下,執行命令:

sh seata-server.sh 

可以看到seata-server成功注入nacos,至此Seata Server端處理完畢。

二、Seata Client端搭建
1、為示例業務創建表
以用戶購買商品的業務邏輯為例搭建微服務系統:
倉儲服務(Stock):對給定的商品扣除倉儲數量。
訂單服務(Order):根據采購需求創建訂單。
賬戶服務(Account):從用戶賬戶中扣除余額。

三個獨立的應用,分別使用三個獨立的數據源。
為示例業務創建庫、表,及每個庫增加undo_log表,執行腳本
注意:每個業務數據庫都要有UNDO_LOG
在這里插入圖片描述
2、業務代碼集成 Seata
源碼:項目源碼
在這里插入圖片描述
1)父pom引入依賴:

 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>2021.0.4</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2021.0.4.0</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.6.11</version><type>pom</type><scope>import</scope></dependency>

2)子pom引入依賴:

 <!-- seata -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency><!--seata starter -->
<dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId>
</dependency><!--nacos discovery --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!--nacos config -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--openfeign -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId><version>3.1.3</version></dependency>

3)yml文件,其他兩個類似:

server:port: 2001spring:application:name: seata-order-servicecloud:nacos:discovery:# 服務分組group: SEATA_GROUPserver-addr: http://localhost:8848# 必須填命名空間的IDnamespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189datasource:type: com.alibaba.druid.pool.DruidDataSource  #當前數據源操作類型driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/seata_order?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false #useSSL安全加固username: rootpassword: 12345678# MyBatis Plus配置
mybatis-plus:# 配置mapper的掃描,找到所有的mapper.xml映射文件mapper-locations: classpath*:mapper/**/*.xml#實體掃描,多個package用逗號或者分號分隔typeAliasesPackage: com.qytest.springcloud.entititesglobal-config:db-config:id-type: autoconfiguration:# 開啟駝峰,開啟后,只要數據庫字段和對象屬性名字母相同,無論中間加多少下劃線都可以識別map-underscore-to-camel-case: true# Seata 配置
seata:application-id: seata-server# 是否啟用數據源bean的自動代理enable-auto-data-source-proxy: falsetx-service-group: dev_tx_group  # 必須和服務器配置一樣registry:type: nacosnacos:# Nacos 服務地址server-addr: http://localhost:8848group: SEATA_GROUPnamespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189application: seata-server # 必須和服務器配置一樣username: nacospassword: nacoscluster: defaultconfig:type: nacosnacos:server-addr: ${spring.cloud.nacos.discovery.server-addr}group: SEATA_GROUPnamespace: 891d7906-dd03-4b8c-9fe9-a1f0609b3189service:vgroup-mapping:tx-service-group: dev_tx_group # 必須和服務器配置一樣disable-global-transaction: falseclient:rm:# 是否上報成功狀態report-success-enable: true# 重試次數report-retry-count: 5

4)編寫業務測試類

order通過feign接口調用庫存及賬戶系統接口

@RestController
@RequestMapping("")
@Slf4j
public class OrderController {@Resourceprivate OrderService orderService;@GetMapping("/order/create")public CommonResult<Order> create(Order order) {orderService.create(order);return new CommonResult<Order>(200, "訂單創建成功", order);}}public interface OrderService extends IService<Order> {void create(Order order);
}@Service
@Slf4j
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {@Resourceprivate StorageService storageService;@Resourceprivate AccountService accountService;/*** 創建訂單->調用庫存服務扣減庫存->調用賬戶服務扣減賬戶余額->修改訂單狀態* 簡單說:下訂單->扣庫存->減余額->改狀態*/@Overridepublic void create(Order order) {//1 新建訂單log.info("----->開始新建訂單");baseMapper.create(order);log.info("----->新建訂單完成");//2 扣減庫存log.info("----->訂單微服務開始調用庫存,做扣減Count");storageService.decrease(order.getProductId(), order.getCount());log.info("----->庫存扣減Count完成");//3 扣減賬戶log.info("----->訂單微服務開始調用賬戶,做扣減Money");accountService.decrease(order.getUserId(), order.getMoney());log.info("----->賬戶扣減Money完成");//4 修改訂單狀態,從0到1,1代表已經完成log.info("----->修改訂單狀態開始");baseMapper.update(order.getUserId(),0);log.info("----->修改訂單狀態結束");log.info("----->下訂單結束了,O(∩_∩)O哈哈~");}
}

5)啟動測試

# 先單機模式啟動nacos
moon@moondeiMac  ~  %  cd /Users/moon/Downloads/nacos-2.2.1/distribution/target/nacos-server-2.2.1/nacos/bin
moon@moondeiMac bin % sh startup.sh -m standalone# 再啟動seata
moon@moondeiMac  ~  %  cd /Users/moon/Downloads/seata/bin
moon@moondeiMac bin % sh seata-server.sh 

分別訪問:http://localhost:8848/nacos、http://localhost:7091/確認下nacos和seata啟動無誤。

然后依次啟動seata-account-service、seata-storage-service、seata-order-service
在這里插入圖片描述
請求接口,模擬正常下單:
http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100
運行結果:
在這里插入圖片描述

3、常見問題

1)can not get cluster name in registry config ‘service.vgroupMapping.xx‘, please make sure registry問題解決;
核對項目中和配置文件是否一致:
2)ERROR — [cos.client.naming.updater] c.a.nacos.client.security.SecurityProxy : [SecurityProxy] login http request failed url: http://127.0.0.1:8848/nacos/v1/auth/users/login, params: {username=nacos}, bodyMap: {password=nacos}, errorMsg: Server returned HTTP response code: 500 for URL: http://127.0.0.1:8848/nacos/v1/auth/users/login?username=nacos

大體上是版本問題,參考文章開頭,更換組件版本。

注意以下幾點:
Seata相關配置是否正確
Seata Server是否正常啟動,并可以被訪問
Seata Client是否正確配置,并與Seata Server保持連接

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208080.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208080.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208080.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java技術棧 —— 微服務框架Spring Cloud —— Ruoyi-Cloud 學習(一)

Ruoyi-cloud 項目學習 一、項目環境搭建與啟動1.1 nacos安裝部署1.1.1 nacos安裝、啟動1.1.2 nacos部署 1.2 seata安裝部署1.3 后端部署與運行1.3.1 ruoyi-modules-file模塊運行報錯 1.4 nginx安裝、部署、配置與啟動1.5 redis安裝與部署1.6 前段框架知識1.7 項目啟動1.8 參考 …

實用方法 | 搭建真正滿足用戶需求的在線幫助中心

隨著互聯網的普及和信息技術的快速發展&#xff0c;客戶服務和支持變得越來越重要。為了提高客戶滿意度和維持良好的品牌形象&#xff0c;越來越多企業都開始搭建自己的在線幫助中心。 不知從何下手&#xff1f;細想一下&#xff0c;搭建在線幫助中心主要就是為了解決用戶的問…

根據java類名找出當前是哪個Excel中的sheet

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

shell_81.Linux在命令行中創建使用函數

在命令行中使用函數 在命令行中創建函數 兩種方法 單行方式來定義函數&#xff1a; $ function divem { echo $[ $1 / $2 ]; } $ divem 100 5 20 $ 當你在命令行中定義函數時&#xff0c;必須在每個命令后面加個分號&#xff0c;這樣 shell 就能知道哪里是命令的起止了&am…

反射實現tomcat

獲取類信息的方法 1.通過類對象 x.getClass() 2.通過class.forname方法 Class.forname(className);這里className是存儲類名的字符串 3.通過類名.class 類名.class 通過類名創建對象 類名.newInstance&#xff08;&#xff09;&#xff1b; 反射可以看到類的一切信息&#xff1…

C語言聯合和枚舉講解

目錄 聯合體的大小 聯合體如何省空間 巧用聯合體 聯合判斷大小端&#xff08;驚為天人&#xff0c;大佬寫的&#xff0c;我借鑒&#xff09; 枚舉 枚舉類型的使用 首先我們先看一下菜鳥教程中的對C語言聯合體的說明 聯合體的大小 #include <stdio.h> union u {char…

Proteus仿真--基于ADC0808設計的調溫報警器

本文介紹基于ADC0808實現的調溫報警器設計&#xff08;完整仿真源文件及代碼見文末鏈接&#xff09; 溫度調節使用滑動變阻器模擬實現&#xff0c;ADC0808采集信號并輸出在LCD上面顯示&#xff0c;報警系統是LED燈和蜂鳴器實現聲光電報警 仿真圖如下 仿真運行視頻 Proteus仿真…

Java實現二分法的案例,什么是二分法

文章目錄 Java實現二分法的案例&#xff0c;什么是二分法二分法實現 Java實現二分法的案例&#xff0c;什么是二分法 二分法 概念&#xff1a; 二分法&#xff08;Bisection method&#xff09; 即一分為二的方法&#xff0c;又叫折半查找方法。把一組有序數列分為左右兩部分…

前程無憂接口分析

前程無憂接口分析 所需用到的工具URL解析通過抓包軟件或者開發者選項抓取數據包對代碼中的參數解析分析對acw_sc__v2進行分析對acw_sc__v2進行轉換代碼生成生成outPutList數組生成arg2參數生成arg3參數最終的效果 對詳情頁面的分析對timestamp__1258的生成分析 所需用到的工具 …

Vue3.0優點詳解

相對于Vue2.0 3.0有了比較大的改進&#xff0c;優勢主要有以下幾點&#xff1a; 一、性能提升 1、Vue3.0的響應式系統使用了Proxy代理對象&#xff0c;取代了Vue2.0中的Object.defineProperty&#xff0c;使得Vue3.0的響應式系統更快、更靈活。 2、Vue3.0對TypeScript的支持更…

Ubuntu22.04安裝完成后便可直接使用鍵盤上的Print鍵進行截圖

概要&#xff1a;Ubuntu22.04安裝完成后&#xff0c;無需安裝什么截圖軟件&#xff0c;可以直接使用鍵盤上的Print鍵進行截圖。 1、按一下Print鍵 我的電腦上Print鍵是PrtSc&#xff0c;如下圖所示 2、框選區域并截圖 如下圖中&#xff0c;可以框選(Selection)&#xff0c;也…

【教學類-35-06】17號的學號字帖延伸出的全體字帖(1-9去0)(A4豎版1份)

作品展示 背景需求&#xff1a; 給大4班17號同學單獨做了一個學號字帖后&#xff0c;我想可以把這樣的學具用在中班&#xff08;我馬上要成為中4班老師了&#xff09;&#xff0c;那就需要給全班做一份這樣的大號學號貼。 使用17號同學的word模板&#xff08;見下文&#xff…

3dMax vs Cinema4d哪個更好更適合你?

Cinema 4d和3dMax的區別 用于游戲風格、開發和風格可視化的3D建模、動畫和渲染軟件系統&#xff0c;為用戶提供制作和編輯動畫、視覺效果和環境的靈活性。4D CINEMA可能是由MAXON構建的強大的3D建模、運動圖形、繪畫和動畫軟件系統。Cinema 4D將在每個Windows和MAC操作系統上運…

多目標追蹤評價指標

多目標追蹤性能評價 基礎&#xff1a; GT&#xff1a;Ground Truth&#xff0c;是指真實的標簽或者真實的對象&#xff1b; TP&#xff1a;True Positive&#xff0c;被正確預測檢測到的樣本&#xff1b; TN&#xff1a;True Negative&#xff0c;被預測為負的負樣本&#…

啃下這50道筆試題,你就是SQL專家!(附答案,收藏備用)

【關注微信公眾號&#xff1a;跟強哥學SQL&#xff0c;回復“筆試”免費領取大廠SQL筆試題。】 有兩個名為Department&#xff08;部門&#xff09;和Employees&#xff08;員工&#xff09;的表結構如下&#xff1a; CREATE TABLE Department ( DepId int, DepName va…

文章解讀與仿真程序復現思路——電力系統自動化EI\CSCD\北大核心《考慮兩階段魯棒優化配置的多微網合作博弈》

這個標題涉及到多個概念&#xff0c;讓我們逐步解讀&#xff1a; 考慮兩階段魯棒優化配置&#xff1a; 兩階段&#xff1a; 指的是在解決問題或進行優化時&#xff0c;可能存在兩個不同的階段或步驟。這表明問題的解決不是一步完成的&#xff0c;而是需要經過多個步驟或階段。魯…

前端學習系列之CSS

目錄 CSS 簡介 發展史 優勢 基本語法 引用方式 內部樣式 行內樣式 外部樣式 選擇器 id選擇器 class選擇器 標簽選擇器 子代選擇器 后代選擇器 相鄰兄弟選擇器 后續兄弟選擇器 交集選擇器 并集選擇器 通配符選擇器 偽類選擇器 屬性選擇器 CSS基本屬性 優…

virtualenv創建虛擬環境

目錄 概念安裝創建虛擬環境激活虛擬環境刪除虛擬環境退出虛擬環境更改虛擬環境路徑概念 virtualenv是一個創建隔離的Python運行環境的工具。它允許用戶為每個Python項目創建一個獨立的虛擬環境,以避免不同項目之間的依賴沖突。 安裝 pip install virtualenv virtualenvwrapper…

JS如何實現豎屏輪播圖

首先是HTML搭建結構 <div class"banner-box"><div class"bannerbox"><div class"banner"><a class"a-img-ban"> <img class"img-ban" src"./img/640 (4).jpg" alt"終于等到你還…

SpringBoot項目訪問resources下的靜態資源

1.新建一個配置文件夾&#xff0c;放配置類 2.編輯 WebMvcConfig.java package com.southwind.configuration;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import or…