当前位置:   article > 正文

SpringCloud-nacos整合seata_nacos集成seata

nacos集成seata

首先介绍下seata是什么?

  1. Seata(原名 Fescar)是一个开源的分布式事务解决方案,旨在解决微服务架构下的分布式事务问题。Seata 提供了高性能和简单易用的分布式事务框枰,支持 ACID 事务属性,并且兼容各种不同的存储引擎。
  2. Seata 主要包括以下三个主要模块:
  3. TC(Transaction Coordinator)事务协调器:负责全局事务的协调和发起,采用一阶段提交或两阶段提交协议来确保跨多个服务的一致性。
  4. TM(Transaction Manager)事务管理器:负责事务的开启、提交和回滚。通过与 TC 交互,协调分布式事务的执行。
  5. RM(Resource Manager)资源管理器:负责事务中各个分支(也称为分支事务)的管理,与本地数据库或其他资源进行交互,确保数据的一致性。
  6. 通过这些模块的协作,Seata 实现了在分布式环境下进行事务管理的功能,包括全局事务的管理、事务注解支持、事务恢复机制等。
  7. Seata 支持的分布式事务模式包括 AT 模式(TCC 柔性事务)、TCC 模式、SAGA 模式和 XA 模式,可以根据实际需求选择适合的事务模式。

其次nacos和seata的安装可以参考这两篇文章:

SpringCloud+Nacos+Seata实现分布式事物_nacos spring setea-CSDN博客

springcloud整合seata、nacos_springcloud seata nacos-CSDN博客 

 SpringCloud+nacos+seata的整合使用

  1. 环境准备:确保已经安装和启动了 Nacos 作为服务注册中心和配置中心,以及 Seata 服务器和各个微服务实例。在 Nacos 中注册微服务,并配置相关的服务信息。

  2. 引入依赖:在订单服务和库存服务的 pom.xml 文件中,添加 Spring Cloud、Seata 和 Nacos 相应的依赖项。

  3. 配置 Nacos 作为配置中心:在订单服务和库存服务的配置文件中,将 Nacos 配置中心的相关配置(如服务地址、命名空间等)添加到配置文件中。

  4. 整合 Seata 到项目中:在订单服务和库存服的 pom.xml 文件中,添加 Seata 的相关依赖项,这些依赖项包括 Seata 的客户端依赖和数据源代理依赖。同时,在订单服务和库存服务的配置文件中,配置 Seata 的代理和 Register 配置。

  5. 使用 @GlobalTransactional 注解:在订单服务的创建订单方法上添加 @GlobalTransactional 注解,该注解表示这是一个全局事务的边界。当进入该方法时,Seata 会自动开始全局事务。同样,库存服务的方法也适用此注解,使其参与到全局事务中。

  6. 调用其他服务:在订单服务中调用库存服务时,通过 RestTemplate 或 Feign 等方式发起请求。Seata 会拦截这些请求并协同完成分布式事务管理。

订单服务(Order Service)配置

  1. 在订单服务的配置文件中,设置 Nacos 作为配置中心,并配置 Seata 的代理和 Register 配置。
  2. spring.application.name=order-service
  3. # 配置 Nacos 作为配置中心
  4. spring.cloud.nacos.config.server-addr=localhost:8848
  5. # 注册 Seata 代理配置
  6. seata.tx-service-group=my_test_tx_group
  7. seata.config.type=file
  8. seata.config.file.path=/path/to/seata-config
  9. seata.config.registry.type=Nacos
  10. seata.config.registry.nacos.endpoint=localhost:8848
  11. seata.config.registry.nacos.group=default
  12. seata.config.registry.nacos.namespace=seata-namespace

库存服务(Inventory Service)配置

  1. 在库存服务的配置文件中,设置 Nacos 作为配置中心,并配置 Seata 的代理和 Register 配置。
  2. spring.application.name=inventory-service
  3. # 配置 Nacos 作为配置中心
  4. spring.cloud.nacos.config.server-addr=localhost:8848
  5. # 注册 Seata 代理配置
  6. seata.config.type=file
  7. seata.config.file.path=/path/to/seata-config
  8. seata.config.registry.type=Nacos
  9. seata.config.registry.nacos.endpoint=localhost:8848
  10. seata.config.registry.nacos.group=default
  11. seata.config.registry.nacos.namespace=seata-namespace

订单服务(Order Service)代码示例

  1. // 订单服务中的Controller类
  2. @RestController
  3. public class OrderController {
  4. @Autowired
  5. private OrderService orderService;
  6. @GlobalTransactional
  7. @PostMapping("/createOrder")
  8. public String createOrder(@RequestBody OrderInfo orderInfo) {
  9. orderService.createOrder(orderInfo);
  10. return "Order created successfully!";
  11. }
  12. }
  13. // 订单服务中的Service类
  14. @Service
  15. public class OrderService {
  16. @Autowired
  17. private RestTemplate restTemplate;
  18. @GlobalTransactional
  19. public void createOrder(OrderInfo orderInfo) {
  20. // 创建订单逻辑
  21. // ...
  22. // 调用库存服务扣减库存
  23. restTemplate.postForObject("http://inventory-service/reduceStock", orderInfo, String.class);
  24. // ...
  25. }
  26. }

库存服务(Inventory Service)代码示例

  1. // 库存服务中的Controller类
  2. @RestController
  3. public class InventoryController {
  4. @Autowired
  5. private InventoryService inventoryService;
  6. @PostMapping("/reduceStock")
  7. public String reduceStock(@RequestBody OrderInfo orderInfo) {
  8. inventoryService.reduceStock(orderInfo.getItemId(), orderInfo.getQuantity());
  9. return "Stock reduced successfully!";
  10. }
  11. }
  12. // 库存服务中的Service类
  13. @Service
  14. public class InventoryService {
  15. @GlobalTransactional
  16. public void reduceStock(String itemId, int quantity) {
  17. // 扣减库存逻辑
  18. // ...
  19. }
  20. }

以上示例演示了如何在 Spring Cloud、Seata 和 Nacos 下实现简单的分布式事务。需要注意的是,还需要在各个微服务的配置文件中配置 Seata 代理和相关信息,以使各个服务正常连接到 Seata Server 进行事务协调。

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/运维做开发/article/detail/813905
推荐阅读
相关标签
  

闽ICP备14008679号