本章主要内容
我们在上一章已经测试了Seata的AT模式的分布式事务,不过每个SpringBoot中都是直接用IP+端口的模式去调用其他服务的,现在我们将上一章中的4个微服务注册到Nacos,并且通过Feign来实现远程调用。
接入Nacos和Feign
首先是在父类工程“springboot-mybatis”的 pom.xml 中引入 springcloud的依赖。
定义新的版本号:
<spring.cloud.version>Greenwich.SR2</spring.cloud.version>
<spring.cloud.alibaba.version>2.1.0.RELEASE</spring.cloud.alibaba.version>
在 <dependencyManagement> 节点中追加:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
然后在 4个 子工程pom.xml 追加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
然后改造 sbm-order-service 工程,将原先的 accountClient 改为 Feign方式远程调用
/sbm-order-service/src/main/java/io/seata/samples/order/service/OrderService.java
//旧的实现
//accountClient.debit(userId, orderMoney);
//改为Feign远程调用
accountFeignClient.debit(userId, orderMoney);
//accountClient 中的实现
public void debit(String userId, BigDecimal orderMoney) {
String ur