dubbo+zookeeper示例代码_《SpringBoot+Dubbo+Seata分布式事务实战》

本文介绍了如何使用Seata进行分布式事务管理,包括环境准备、项目配置、数据库设计和依赖引入。通过简化业务场景,展示了订单和库存服务的交互,并详细解释了Seata的安装与配置过程,旨在帮助读者理解并快速上手Seata分布式事务解决方案。
摘要由CSDN通过智能技术生成
46c0b40259a3d84b6564386515c52054.png

Seata 是 阿里巴巴开源的分布式事务中间件,以高效并且对业务0侵入的方式,解决微服务场景下面临的分布式事务问题。

事实上,官方在GitHub 已经给出了多种环境下的Seata 应用示例项目,地址:https://github.com/seata/seata-samples 。

为什么笔者要重新写一遍呢,主要原因有两点:

  • 官网代码示例中,依赖太多,分不清哪些有什么作用
  • Seata相关资料较少,笔者在搭建的过程中,遇到了一些坑,记录一下

一、环境准备

本文涉及软件环境如下:

  • SpringBoot 2.1.6.RELEASE
  • Dubbo 2.7.1
  • Mybatis 3.5.1
  • Seata 0.6.1
  • Zookeeper 3.4.10

1、业务场景

为了简化流程,我们只需要订单和库存两个服务。创建订单的时候,调用库存服务,扣减库存。

涉及的表设计如下:

CREATE TABLE `t_order` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_no` varchar(255) DEFAULT NULL, `user_id` varchar(255) DEFAULT NULL, `commodity_code` varchar(255) DEFAULT NULL, `count` int(11) DEFAULT '0', `amount` double(14,2) DEFAULT '0.00', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8;CREATE TABLE `t_storage` ( `id` int(11) NOT NULL AUTO_INCREMENT, `commodity_code` varchar(255) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `count` int(11) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `commodity_code` (`commodity_code`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;复制代码

另外还需要一个回滚日志表:

CREATE TABLE `undo_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `branch_id` bigint(20) NOT NULL, `xid` varchar(100) NOT NULL, `rollback_info` longblob NOT NULL, `log_status` int(11) NOT NULL, `log_created` datetime NOT NULL, `log_modified` datetime NOT NULL, `ext` varchar(100) DEFAULT NULL, `context` varchar(100) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=utf8;复制代码

2、Seata下载安装

打开https://github.com/seata/seata/releases ,目前最新版本是v0.6.1 。

下载解压后,到seata-server-0.6.1distributionbin 目录下可以看到seata-server.bat和seata-server.sh ,选择一个双击执行。

不出意外的话,当你看到-Server started ... 等字样,就正常启动了。

3、Maven依赖

由于是Dubbo项目,我们先引入Dubbo相关依赖。

org.apache.dubbodubbo2.7.1org.apache.dubbodubbo-spring-boot-starter2.7.1复制代码

Dubbo的服务要注册到Zookeeper,引入curator客户端。

org.apache.curatorcurator-framework2.13.0org.apache.curatorcurator-recipes2.13.0复制代码

最后,引入Seata。

io.seataseata-all0.6.1复制代码

当然了,还有其他的如Mybatis、mysql-connector 等就不粘了,自行引入即可。

二、项目配置

1、application.properties

这里只需要配置数据库连接信息和Dubbo相关信息即可。

server.port=8011spring.datasource.url=jdbc:mysql://127.0.0.1:3306/seataspring.datasource.username=rootspring.datasource.password=rootdubbo.application.name=order-servicedubbo.registry.address=zookeeper://127.0.0.1:2181dubbo.protocol.name=dubbodubbo.protocol.port=20881dubbo.consumer.timeout=9999999dubbo.consumer.check=false复制代码

2、数据源

Seata 是通过代理数据源实现事务分支,所以需要先配置一个数据源的代理,否则事务不会回滚。

@Beanpublic DataSourceProxy dataSourceProxy(DataSource dataSource) {return new DataSourceProxy(dataSource);}复制代码

注意,这里的DataSourceProxy 类位于io.seata.rm.datasource 包内。

3、Seata配置

还需要配置全局事务扫描器。有两个参数,一个是应用名称,一个是事务分组。

@Beanpublic GlobalTransactionScanner globalTransactionScanner() {return new GlobalTransactionScanner("springboot-order
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值