天天看點

Windows 安裝 Seata 1.6.1 并配置開機自啟

環境聲明

軟體 版本 安裝教程
作業系統 windows
Nacos 2.2.2 Windows 安裝 Nacos 2.2
MySQL 8.0.27 Linux 安裝 MySQL 8

Seata 服務端安裝部署

下載下傳 Seata

下載下傳 seata-server-1.6.1.zip (⬇️ 更多版本下載下傳), 将檔案解壓到本地目錄 D:\middleware\seata。

Windows 安裝 Seata 1.6.1 并配置開機自啟

資料庫建立

建立名為 seata 的資料庫 ,執行腳本 seata\script\server\db\mysql.sql 建立表結構的建立

Seata 配置

參考 seata\conf\application-example.yml 示例配置檔案修改 seata\conf\application.yml 的配置中心和注冊中心的方式為 nacos ,資料存儲模式為 db

yaml複制代碼seata:
  # 配置中心-nacos
  config:
    # support: nacos, consul, apollo, zk, etcd3
    type: nacos
    nacos:
      server-addr: 127.0.0.1:8848
      namespace:
      group: SEATA_GROUP
      username: nacos
      password: nacos
      context-path:
      data-id: seataServer.properties
  # 注冊中心-nacos
  registry:
    # support: nacos, eureka, redis, zk, consul, etcd3, sofa
    type: nacos
    nacos:
      application: seata-server
      server-addr: 127.0.0.1:8848
      group: SEATA_GROUP
      namespace:
      # TC 叢集名稱,下文 Seata 用戶端中配置事務分組名和叢集名映射使用
      cluster: default
      username: nacos
      password: nacos
  # 資料存儲模式-db 資料庫
  store:
    # support: file 、 db 、 redis
    mode: db
           

Nacos 配置

通路 Nacos 控制台,配置清單 public 命名空間建立名為 seataServer.properties 的配置

Windows 安裝 Seata 1.6.1 并配置開機自啟

複制 seata\script\config-center\config.txt 内容至 seataServer.properties

Windows 安裝 Seata 1.6.1 并配置開機自啟

修改 seataServer.properties 的資料庫連接配接資訊

ini複制代碼# 修改資料庫連接配接
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?useUnicode=true&rewriteBatchedStatements=true
store.db.user=username
store.db.password=password
           

啟動 seata-server

進入 seata\bin 目錄,滑鼠輕按兩下 seata-server.bat 檔案啟動

Windows 安裝 Seata 1.6.1 并配置開機自啟
Windows 安裝 Seata 1.6.1 并配置開機自啟

啟動成功之後,通路 Nacos 控制台檢視服務是否注冊成功

Windows 安裝 Seata 1.6.1 并配置開機自啟

Seata Server 開機自啟

WinSW(Windows Service Wrapper 是一個開源的 Windows 服務包裝器,它可以幫助你将應用程式打包成系統服務,并實作開機自啟動的功能。

下載下傳 WinSW

下載下傳 WinSW-x64.exe v2.12.0 (⬇️ 更多版本下載下傳) 和 sample-minimal.xml

Windows 安裝 Seata 1.6.1 并配置開機自啟

配置 WinSW

  1. 重命名 WinSW-x64.exe 為 seata-service.exe , sample-minimal.xm 為 seata-service.xml ,将重命名後的檔案放置在D:\middleware\seata\bin 目錄下
  2. 修改 seata-service.xml 檔案的配置如下:
  3. xml複制代碼
  4. <service> <!-- 唯一服務ID--> <id>seata</id> <!-- 顯示服務的名稱 --> <name>Seata Service</name> <!-- 服務描述 --> <description>Seata 服務</description> <!-- 日志路徑--> <logpath>D:\middleware\seata\bin\logs</logpath> <!-- 日志模式 --> <logmode>roll</logmode> <!-- 指定啟動可執行檔案 --> <executable>D:\middleware\seata\bin\seata-server.bat</executable> <!-- 開機啟動 --> <startmode>Automatic</startmode> </service>

安裝和啟動服務

CMD 切換到 D:\middleware\seata\bin 目錄下,執行以下指令完成服務的安裝和啟動

bash複制代碼# 安裝服務
seata-service.exe install
# 啟動服務
seata-service.exe start
# 檢視服務狀态
seata-service.exe status
           
Windows 安裝 Seata 1.6.1 并配置開機自啟

在 Windows 系統服務清單可以看到 Seata 服務(已驗證可以開機自啟動)

Windows 安裝 Seata 1.6.1 并配置開機自啟

其他指令

bash複制代碼# 解除安裝服務
seata-service.exe uninstall
# 重新開機服務
seata-service.exe restart
           

SpringBoot 整合 Seata

依賴 pom.xml

xml複制代碼<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </exclusion>
    </exclusions>
</dependency>
           

配置 application.yml

yaml複制代碼seata:
  enabled: true
  # 事務分組名
  tx-service-group: default_tx_group
  service:
    # 事務分組名和叢集名映射(default_tx_group:default),default 是上文 seata server 配置的 TC 叢集名
    vgroup-mapping:
      default_tx_group: default 
  # 注冊中心
  registry:
    type: nacos
    nacos:
      application: seata-server
      server-addr: localhost:8848
      namespace:
      group: SEATA_GROUP
      username: nacos
      password: nacos
           

實戰應用

在需要開啟全局事務的方法添加 @GlobalTransactional 注解,項目完整源碼 youlai-mall

less複制代碼/**
 * 訂單支付
 */
@Override
@GlobalTransactional
public boolean payOrder(Long orderId) {

    OmsOrder order = this.getById(orderId);
    Assert.isTrue(order != null, "訂單不存在");

    Assert.isTrue(OrderStatusEnum.UNPAID.getValue().equals(order.getStatus()), "訂單不可支付,請檢查訂單狀态");

    RLock lock = redissonClient.getLock(ORDER_LOCK_PREFIX + order.getOrderSn());
    try {
        lock.lock();
        // 扣減餘額
        memberFeignClient.deductBalance(SecurityUtils.getMemberId(), order.getPayAmount());
        // 扣減庫存
        skuFeignClient.deductStock(order.getOrderSn());
        // 修改訂單狀态 → 【已支付】
        // ....
        return true;
    } finally {
        //釋放鎖
        if (lock.isLocked()) {
            lock.unlock();
        }
    }
}
           

商城源碼

名稱/Git倉庫 Github Gitee
開源組織 有來開源組織 有來開源組織
後端 youlai-mall youlai-mall
前端 mall-admin mall-admin
移動端 mall-app mall-app

作者:有來技術

連結:https://juejin.cn/post/7250361765053087781

繼續閱讀