上云无忧 > 文档中心 > 百度智能云云原生微服务应用平台分布式事务接入
云原生微服务应用平台
百度智能云云原生微服务应用平台分布式事务接入

文档简介:
准备工作: 开发环境中下载Maven并完成环境配置。 开发环境中安装JDK1.8并完成环境配置(目前仅支持1.8版本)。 目前仅支持与天合微服务平台结合使用,请参照"Spring-Cloud-应用接入"文档进行接入。 将分布式事务相关的jar包安装到开发环境的Maven库中:下载事务依赖包,并按照压缩包中的README说明进行安装。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

准备工作

  • 开发环境中下载Maven并完成环境配置
  • 开发环境中安装JDK1.8并完成环境配置(目前仅支持1.8版本)
  • 目前仅支持与天合微服务平台结合使用,请参照"Spring-Cloud-应用接入"文档进行接入
  • 将分布式事务相关的jar包安装到开发环境的Maven库中:下载事务依赖包,并按照压缩包中的README说明进行安装

引入依赖

修改pom.xml文件,根据使用场景引入所需的maven依赖。

<!--服务之间通过rest访问-->
<dependency>
    <groupId>com.baidu.btcc</groupId>
    <artifactId>btcc-rest-template</artifactId>
    <version>2.3.0-SNAPSHOT</version>
</dependency>
<!--服务之间通过feign访问-->
<dependency>
    <groupId>com.baidu.btcc</groupId>
    <artifactId>btcc-spring-cloud</artifactId>
    <version>2.3.0-SNAPSHOT</version>
</dependency>

添加配置项

在application.properties文件中添加如下配置,用于上传事务数据。

# 事务所属的模块名
btcc.moduleName=xxxx
# 用户鉴权信息,可以通过控制台进行查看和更新
btcc.token=xxxx
# 事务分组,需要通过控制台进行管理
btcc.transGroup=xxxx
# 事务数据的上传地址
btcc.serverAddress=list://100.64.253.71:8024
# 同步/异步执行confirm和cancel操作,true表示同步,false表示异步
btcc.isSync=false
# 连接btcc-server的超时时间
btcc.connectTimeoutMillis=200
# 访问btcc-server的读超时时间
btcc.readTimeoutMillis=1000
# 访问btcc-server的写超时时间
btcc.writeTimeoutMillis=200
# 访问btcc-server的最大连接数
btcc.maxTotalConnections=1000
# 访问btcc-server的最小空闲连接数
btcc.minIdleConnections=10
# 访问btcc-server的最大重试次数
btcc.maxTryTimes=3
# 访问btcc-server的工作线程数
btcc.workThreadNum=10

开启事务功能

开启分布式事务功能,需要在代码中额外添加配置:

  • 开启对com.baidu.btcc包的扫描
  • 解析btcc配置,确保可以获得BtccConfig对象
  • 为RestTemplate和AsyncRestTemplate设置拦截器

修改的代码示例如下所示。

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
@ComponentScan(basePackages = "com.baidu.btcc")
public class OrderApplication {
    @Bean
    @ConfigurationProperties("btcc")
    public BtccConfig btccConfig() {
        return new BtccConfig();
    }
 
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        RestTemplate restTemplate = new RestTemplate();
        restTemplate.setInterceptors(Lists.newArrayList(new BtccRestTemplateInterceptor()));
        return restTemplate;
    }
 
    @LoadBalanced
    @Bean
    public AsyncRestTemplate asyncRestTemplate(){
        AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate();
        asyncRestTemplate.setInterceptors(Lists.newArrayList(new BtccRestTemplateAsyncInterceptor()));
        return asyncRestTemplate;
    }
 
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
}

业务改造

在事务发起方和事务参与方的try方法上添加注解,用于创建一条事务信息:

@BtccTransactional(confirmMethod = "", cancelMethod = "", mode="")

其中:

  • confirmMethod表示事务确认函数,默认为空。
  • cancelMethod表示事务取消函数,默认为空。
  • mode表示事务的模式,可选,默认为MT(MT表示手动回滚,AT表示自动回滚)。

注意:

  • @BtccTransactional可以保障本地事务,不需要再显式增加spring的@Transactional注解。
  • 对于事务发起方,一般情况下不需要设置confirmMethod、cancelMethod。
  • 对于事务参与方,在MT模式下必需提供cancelMethod,确保事务失败时可以进行回滚。
  • try / confirm / cancel方法必须定义在interface中,@BtccTransactional加在实现类的方法上。
  • 同一组try/confirm/cancel方法,入参必须一样。

AT模式

  1. 配置数据源代理

使用btcc提供的com.baidu.btcc.client.datasource.DataSourceProxy数据源代理,代码示例如下。

@Configuration
@PropertySource("classpath:application.properties")
public class DatabaseConfig {
    @Value("${spring.datasource.url}")
    private String jdbcUrl;
    @Value("${spring.datasource.username}")
    private String username;
    @Value("${spring.datasource.password}")
    private String password;
    // 其他配置项
 
    @Bean
    public DataSource dataSource() throws SQLException {
        HikariDataSource dataSource = new HikariDataSource();
        dataSource.setJdbcUrl(jdbcUrl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        // 设置其他配置项
        return new DataSourceProxy(dataSource);
    }
}
  1. 创建数据库表

在数据库中创建undo_log、btcc_global_lock表,建表所需的sql语句请参考事务依赖包。

  1. 业务使用

在事务发起方和参与方添加注解@BtccTransactional(mode="AT")即可。

注意:

目前AT模式只支持mysql数据库
AT模式适用于相对简单的sql,若cancel场景比较复杂,建议使用MT模式
相似文档
  • 准备工作: 开发环境中下载 Maven 并完成环境配置。 开发环境中安装 JDK 1.8 并完成环境配置(目前项目仅支持 1.8)。 创建 demo 服务: 1. 创建 config-demo 工程: 创建一个 Maven 工程,命名为 config-demo,JDK 选择 1.8 版本。 2. 修改 pom 文件,添加 Spring Cloud 和配置中心客户端依赖。
  • 准备工作: 服务网格(Service Mesh)是致力于解决服务间通讯的基础设施层,用于处理服务间通讯。Service Mesh 通常是通过一组轻量级网络代理(Sidecar proxy),与应用程序代码部署在一起来实现,而无需感知应用程序本身。
  • 轻量级注册中心主要为开发者提供本地轻量级注册中心服务,为开发者提供在开发、联调、测试阶段的服务注册、发现等功能; 前提条件: 在使用轻量级注册中心前,请确保: 环境安装JDK1.8并完成环境配置; 确保端口8600、8500、8301、8302和8300端口未被占用;
  • 百度智能云容器引擎(Cloud Container Engine,即CCE)是高度可扩展的高性能容器管理服务,您可以在托管的云服务器实例集群上轻松运行应用程序。使用该服务,您将无需安装、运维、扩展您的集群管理基础设施,只需进行简单的API调用,便可启动和停止Docker应用程序,查询集群的完整状态,以及使用各种云服务。您可以根据您的资源需求和可用性要求在您的集群中部署容器,满足业务或应用程序的特定要求。
  • 2021-08:增加 Namespace 资源限制说明。集群管理员可以通过 Resource Quota 及 LimitRange 为每个租户设置资源限额。 2021-07:新增VPC-CNI模式下容器网段空间耗尽时的扩容方案。VPC-CNI 模式下,容器的 IP 来自 VPC 中的子网。随着集群规模扩大,ENI 子网中的 IP 可能耗尽,利用 CNI 提供的动态配置功能,可以给集群增加新的 ENI 子网。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部