1 Star 0 Fork 0

zhouguangping/seata-order

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Seata示例程序

官网demo

Seata order product

本项目演示如何使用 Seata Starter 完成 Spring Cloud 应用的分布式事务接入。

Seata 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。

准备工作

在运行此示例之前,你需要先完成如下几步准备工作:

  1. 配置数据库

  2. 创建 UNDO_LOG 表

  3. 创建 示例中 业务所需要的数据库表

  4. 启动 Seata Server

配置数据库

首先,你需要有一个支持 InnoDB 引擎的 MySQL 数据库。

注意: 实际上,Seata 支持不同的应用使用完全不相干的数据库,但是这里为了简单地演示一个原理,所以我们选择了只使用一个数据库。

seata-orderseata-product 这两个应用中的 resources 目录下的 application.yml 文件中的如下配置修改成你运行环境中的实际配置。

seata-order

server:
  port: 8085

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_order
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: seata
    password: seata

  cloud:
    alibaba:
      seata:
        tx-service-group: seata-order
  application:
    name: seata-order

seata:
  service:
    vgroup-mapping:
      seata-order: default
    grouplist:
      default: 127.0.0.1:8091

seata-product

server:
  port: 8086

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/db_product
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: seata
    password: seata

  cloud:
    alibaba:
      seata:
        tx-service-group: seata-product
  application:
    name: seata-product

创建 undo_log 表

Seata AT 模式 需要使用到 undo_log 表。

-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
CREATE TABLE `undo_log` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `branch_id` bigint(20) NOT NULL,
  `xid` varchar(100) NOT NULL,
  `context` varchar(128) NOT NULL,
  `rollback_info` longblob NOT NULL,
  `log_status` int(11) NOT NULL,
  `log_created` datetime NOT NULL,
  `log_modified` datetime NOT NULL,
  `ext` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

创建 示例中 业务所需要的数据库表

db_product

CREATE TABLE `t_product` (
  `product_id` bigint(20) unsigned NOT NULL,
  `count` int(11) DEFAULT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

启动 Seata Server

点击这个页面 https://github.com/seata/seata/releases,下载最新版本的 Seata Server 端.

进入解压之后的 bin 目录,执行如下命令来启动, 所有启动参数为可选项。

sh seata-server.sh -p $LISTEN_PORT -m $MODE(file or db) -h $HOST -e $ENV

-p seata-server 监听服务端口号
-m 存储模式,可选值:file、db。file 用于单点模式,db用于ha模式,当使用db存储模式,需要修改配置中store配置节点的数据库配置,同时在数据库中初始化global_table、branch_table和 lock_table
-h 用于解决seata-server和业务侧跨网络问题,其配置的host值直接显示到注册中心的服务可用地址host,当跨网络时这里需要配置为公网IP或NATIP,若都在同一局域网则无需配置
-e 用于解决多环境配置中心隔离问题
在这个示例中,采用如下命令来启动 Seata Server

sh seata-server.sh -p 8091 -m file

注意 如果你修改了endpoint且注册中心使用默认file类型,那么记得需要在各个示例工程中的 file.conf 文件中,修改 grouplist 的值(当registry.conf 中registry.type 或 config.type 为file 时会读取内部的file节点中的文件名,若type不为file将直接从配置类型的对应元数据的注册配置中心读取数据),推荐大家使用 nacos 作为配置注册中心。

运行示例

分别运行 seata-orderseata-product 这两个应用的,启动示例。

启动示例后,通过 HTTP 的 GET 方法访问如下两个 URL,可以分别验证在订单创建失败的情况下,库存的扣减情况。

http://127.0.0.1:8805/create

springcloud对应springboot各个版本

官网

Release Train Boot version
2020.0.x aka Ilford 2.4.x, 2.5.x (Starting with 2020.0.3)
Hoxton 2.2.x, 2.3.x (Starting with SR5)
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

对 Spring Cloud 支持点

  • 通过 Spring MVC 提供服务的服务提供者,在收到 header 中含有 Seata 信息的 HTTP 请求时,可以自动还原 Seata 上下文。

  • 支持服务调用者通过 RestTemplate 调用时,自动传递 Seata 上下文。

  • 支持服务调用者通过 FeignClient 调用时,自动传递 Seata 上下文。

  • 支持 SeataClient 和 Hystrix 同时使用的场景。

  • 支持 SeataClient 和 Sentinel 同时使用的场景。

空文件

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhouguangping/seata-order.git
git@gitee.com:zhouguangping/seata-order.git
zhouguangping
seata-order
seata-order
master

搜索帮助