天天看点

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

继续阅读