天天看点

分布式事物------初探seata-nacos实现方式推荐公众号正文

目录

  • 推荐公众号
  • 正文
    • 1.按照demo例子下载,配置
    • 2.jar引用
    • 3.项目中配置代理数据源
    • 4.启动类排除数据源自动注入
    • 5.配置文件添加组名
    • 6.项目中添加
    • 7.效果

推荐公众号

有彩蛋哦!!!(或者公众号内点击网赚获取彩蛋)

分布式事物------初探seata-nacos实现方式推荐公众号正文

如有其它意见欢迎指正微信 zzh_1_2_3

正文

1.按照demo例子下载,配置

https://github.com/seata/seata-samples/blob/master/springcloud-nacos-seata/README.md

2.jar引用

gradle:
// https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-seata
    implementation group: 'com.alibaba.cloud', name: 'spring-cloud-alibaba-seata', version: '2.1.0.RELEASE'
// https://mvnrepository.com/artifact/io.seata/seata-all
    implementation group: 'io.seata', name: 'seata-all', version: '1.0.0'
maven:
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-seata</artifactId>
            <version>2.1.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>io.seata</groupId>
            <artifactId>seata-all</artifactId>
            <version>1.0.0</version>
        </dependency>
           

3.项目中配置代理数据源

/**
 * 数据源配置
 *
 * @author HelloWoodes
 */
@Configuration
public class DataSourceConfig {

    @Bean
    public HikariDataSource hikariDataSource() {
        HikariConfig hikariConfig = new HikariConfig();
        hikariConfig.setUsername("root");
        hikariConfig.setPassword("zzh123");
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/qtjuaa?useUnicode=true&characterEncoding=utf8&useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC");
        hikariConfig.setPoolName("Hikari");
        hikariConfig.setAutoCommit(false);
        HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
        return hikariDataSource;
    }

    /**
     * 需要将 DataSourceProxy 设置为主数据源,否则事务无法回滚
     *
     * @return The default datasource
     */
    @Primary
    @Bean("dataSource")
    public DataSource dataSource(HikariDataSource hikariDataSource) {
        return new DataSourceProxy(hikariDataSource);
    }
}
           

4.启动类排除数据源自动注入

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

5.配置文件添加组名

cloud:
        alibaba:
          seata:
            tx-service-group: scheduling-service-group
           

6.项目中添加

registr.conf

registry {
  # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
  type = "nacos"

  nacos {
    serverAddr = "127.0.0.1"
    namespace = "public"
    cluster = "default"
  }
}
config {
  # file、nacos 、apollo、zk、consul、etcd3
  type = "nacos"
  nacos {
    serverAddr = "127.0.0.1"
    namespace = ""
    cluster = "default"
  }
}
           

7.效果

回滚

2020-01-02 16:45:18.821 DEBUG 11704 --- [  XNIO-1 task-1] c.a.c.seata.web.SeataHandlerInterceptor  : xid in RootContext null xid in RpcContext 10.218.129.116:8091:2031660206
2020-01-02 16:45:18.822 DEBUG 11704 --- [  XNIO-1 task-1] io.seata.core.context.RootContext        : bind 10.218.129.116:8091:2031660206
。。。。。。
2020-01-02 16:45:19.771 DEBUG 11704 --- [atch_RMROLE_1_8] i.s.core.rpc.netty.RmMessageListener     : branch rollback result:xid=10.218.129.116:8091:2031660206,branchId=2031660207,branchStatus=PhaseTwo_Rollbacked,result code =Success,getMsg =null
。。。。。。
正常
2020-01-02 16:37:37.526 DEBUG 21288 --- [  XNIO-1 task-1] io.seata.core.context.RootContext        : bind 10.218.129.116:8091:2031660201
2020-01-02 16:37:37.527  INFO 21288 --- [  XNIO-1 task-1] i.seata.tm.api.DefaultGlobalTransaction  : Begin new global transaction [10.218.129.116:8091:2031660201]
2020-01-02 16:37:37.527 DEBUG 21288 --- [  XNIO-1 task-1] c.e.q.aop.logging.LoggingAspect          : Enter: com.ecidi.qianguanju.service.dingtalk.DingTalkInfoService.test() with argument[s] = [pit_chec]
2020-01-02 16:37:37.867 DEBUG 21288 --- [  XNIO-1 task-1] c.e.qianguanju.fegin.SchedulingClient    : [SchedulingClient#bpmBusLinkUpdate] ---> PUT http://scheduling/api/qtj/testa?type=pit_chec HTTP/1.1
2020-01-02 16:37:38.202 DEBUG 21288 --- [  XNIO-1 task-1] c.e.qianguanju.fegin.SchedulingClient    : [SchedulingClient#bpmBusLinkUpdate] <--- HTTP/1.1 200 OK (335ms)
2020-01-02 16:37:38.209 DEBUG 21288 --- [  XNIO-1 task-1] c.e.q.aop.logging.LoggingAspect          : Exit: com.ecidi.qianguanju.service.dingtalk.DingTalkInfoService.test() with result = null
2020-01-02 16:37:38.217 DEBUG 21288 --- [  XNIO-1 task-1] i.s.core.rpc.netty.AbstractRpcRemoting   : offer message: xid=10.218.129.116:8091:2031660201,extraData=null
2020-01-02 16:37:38.217 DEBUG 21288 --- [geSend_TMROLE_1] i.s.core.rpc.netty.AbstractRpcRemoting   : write message:SeataMergeMessage xid=10.218.129.116:8091:2031660201,extraData=null
, channel:[id: 0x4970c5b3, L:/10.218.129.116:55462 - R:/10.218.129.116:8091],active?true,writable?true,isopen?true
2020-01-02 16:37:38.225 DEBUG 21288 --- [  XNIO-1 task-1] io.seata.core.context.RootContext        : unbind 10.218.129.116:8091:2031660201 
。。。。。。
           

继续阅读