目录
一、业务场景:
用户下单,整个业务逻辑由两个微服务构成:
-
订单服务:根据采购需求创建订单。
-
库存服务:对给定的商品扣除库存数量。
二、pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.3.0</version>
</dependency>
三、bootstrap.yml
需要修改:数据库地址,库名,nacos的地址:
logging:
level:
com:
beiyou: debug
root: error
server:
port: 3999
spring:
application:
name: order-app
cloud:
nacos:
discovery:
server-addr: 192.168.11.82:8848
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 10
max-active: 100
max-wait: 60000
min-idle: 10
url: jdbc:mysql://192.168.11.79:3308/beimao_order?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&allowMultiQueries=true
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
feign:
client:
config:
default:
read-timeout: 6000000
seata:
enabled: true
enable-auto-data-source-proxy: true
tx-service-group: mygroup # 事务分组名称,要和服务端对应
config:
type: nacos
nacos:
server-addr: 192.168.11.82:8848
group: DEFAULT_GROUP
namespace: public
username: nacos
password: nacos
data-id: seataServer.properties
registry:
type: nacos
nacos:
server-addr: 192.168.11.82:8848
application: seata-server
namespace: public
username: nacos
password: nacos
cluster: default
group: DEFAULT_GROUP
service:
vgroup-mapping:
mygroup: default # key是事务分组名称 value要和服务端的保持一致
disable-global-transaction: false
client:
rm:
report-success-enable: false
四、使用
beimao_stock库存库添加如下表:
CREATE TABLE `inventory` (
`id` int NOT NULL AUTO_INCREMENT COMMENT '唯一id',
`productId` int NOT NULL COMMENT '商品Id',
`qty` int DEFAULT '0' COMMENT '库存数量',
PRIMARY KEY (`id`)
)
beimao_order添加以下表:
CREATE TABLE `order_master` (
`id` bigint NOT NULL COMMENT '订单id',
`name` varchar(100) DEFAULT NULL COMMENT '用户名',
`phone` varchar(11) DEFAULT NULL COMMENT '手机号',
PRIMARY KEY (`id`)
);
CREATE TABLE `order_item` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '唯一id',
`orderId` bigint NOT NULL COMMENT '订单id',
`productName` varchar(100) DEFAULT NULL COMMENT '商品名称',
`productId` int DEFAULT NULL COMMENT '商品id',
`qty` int DEFAULT NULL COMMENT '购买数量',
PRIMARY KEY (`id`)
)
在外层接口上增加@GlobalTransactional注解即可
@GlobalTransactional(name="createOrder")
public String ordering(){
orderDao.insert();
storageService.deduct(2);
return "ok";
}