• SpringCloud-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 进行事务协调。

  • 相关阅读:
    ib课程IA指什么?IA占比IB课程25%
    基于SpringBoot的停车场管理系统
    [微前端实战]---036 react16 - 新车排行登录
    [NOIP2007 提高组] 树网的核
    简单了解一下:NodeJS的WebSocket网络编程
    类方法,静态方法和实例方法的区别及应用场景
    法国生物制药公司【Abivax SA】申请1亿美元纳斯达克IPO上市
    shell脚本基础——Shell运行原理+变量、数组定义
    Numpy入门[11]——生成数组的函数
    ARM开发初级-ARM、Cortex-M4与STM32背景知识(包含STM32产品命名规则)-学习笔记01
  • 原文地址:https://blog.csdn.net/qq873113580/article/details/136564102