spring cloud eureka Feign整合seata,应用和测试

本文介绍了如何将Seata与SpringCloud G版本整合,包括Maven依赖配置、数据源代理设置和业务代码中的分布式事务注解使用。同时,详细阐述了Seata的高可用性,如单台Seata服务器宕机和全部宕机时的情况,强调了在故障发生时的处理策略和影响分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

seata整合

spring cloud版本 G版本

1. maven文件

  <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-spring-boot-starter</artifactId>
            <version>1.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
            <version>2.2.0.RELEASE</version>
            <exclusions>
                <exclusion>
                    <groupId>io.seata</groupId>
                    <artifactId>seata-spring-boot-starter</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2. 数据源要进行代理

 import io.seata.rm.datasource.DataSourceProxy;

   @Primary
    @Bean("dataSource")
    public DataSourceProxy dataSource(DataSource druidDataSource){
        return new DataSourceProxy(druidDataSource);
    }

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        logger.info("开始装载 annotationDrivenTransactionManager.dataSource>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        return new DataSourceTransactionManager(druidDataSource());
    }
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean(DataSourceProxy dataSourceProxy) throws Exception {
        MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
        sqlSessionFactory.setDataSource(dataSourceProxy);

 

3.业务代码:

  只需要再开始的方法上加一个分布式注解:

  @GlobalTransactional(name = "fsp-create-order",rollbackFor = Exception.class)

  这样整个一套链路的Feign调用,包括两个服务之间的来回调用,都不用加事务注解,seata会自动传递xid,并且进行分布式事务

 

4.注意事项,请看官方文档

https://seata.io/zh-cn/docs/overview/faq.html

seata高可用测试:

seata启动三台,注册到eureka

1.seata挂掉一台

     ①如果开始事务没有再这一台seata上,那么不会影响事务进行,会很快切换到其他机器的seata上

     ②如果开始事务在这台seata上,第二阶段的事务会发生回滚失败,一直重试到配置文件中设置的回滚超时时间,建议不用特殊处理,因为大多数情况,此时分布式事务是成功的

        如果要处理可自定义实现FailureHandler做邮件通知或其他

2.seata全部挂掉,

     ①应用正常运行,此时会有错误日志,连接到不到seata,不影响不进行分布式事务的增删改查

         有@GlobalLock和@GlobalTransactional注解的分布式事务方法,全部不能够进行  

    ②应用重启,会有错误日志,能够正常重启成功,请求正常进行

        有@GlobalLock和@GlobalTransactional注解的分布式事务方法,全部不能够进行  

 

 总结:

   seata高可用还是非常好的,能够再一台挂掉后,快速切换到另一台,全部挂掉,要及时进行处理,否则会影响正常业务进行

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值