Seata 快速开始()

  本篇文章为你整理了Seata 快速开始()的详细内容,包含有 Seata 快速开始,希望能帮助你了解 Seata 快速开始。

   En首页文档解决方案Seata企业版微服务解决方案高可用解决方案微服务Serverless解决方案PaaS解决方案服务网格解决方案SOFA分布式事务 开发者团队招聘博客社区下载 文档概述Seata 是什么?术语表FAQ用户文档快速启动参数配置事务分组事务分组介绍事务分组与高可用配置中心简介Nacos 配置中心Apollo 配置中心Etcd3 配置中心Consul 配置中心Zookeeper 配置中心注册中心简介Nacos 注册中心Eureka 注册中心Etcd3 注册中心Consul 注册中心Zookeeper 注册中心API 支持微服务框架支持ORM 框架支持数据库类型支持SQL参考SQL限制DML语句SQL修饰函数APMSkyWalkingPrometheus测试报告性能测试报告附录事务状态事务隔离开发者指南各事务模式Seata AT 模式Seata TCC 模式Seata Saga 模式Seata XA 模式Metrics设计运维指南版本升级指南部署新人文档直接部署Docker部署Docker compose部署Kubernetes部署Helm 部署高可用部署快速开始

  让我们从一个微服务示例开始。

  用户购买商品的业务逻辑。整个业务逻辑由3个微服务提供支持:

  仓储服务:对给定的商品扣除仓储数量。

  订单服务:根据采购需求创建订单。

  帐户服务:从用户帐户中扣除余额。

  

public interface StorageService {

 

   * 扣除存储数量

   void deduct(String commodityCode, int count);

  

 

  

public interface OrderService {

 

   * 创建订单

   Order create(String userId, String commodityCode, int orderCount);

  

 

  

public interface AccountService {

 

   * 从用户账户中借出

   void debit(String userId, int money);

  

 

  主要业务逻辑

  

public class BusinessServiceImpl implements BusinessService {

 

   private StorageService storageService;

   private OrderService orderService;

   * 采购

   public void purchase(String userId, String commodityCode, int orderCount) {

   storageService.deduct(commodityCode, orderCount);

   orderService.create(userId, commodityCode, orderCount);

  

 

  

public class OrderServiceImpl implements OrderService {

 

   private OrderDAO orderDAO;

   private AccountService accountService;

   public Order create(String userId, String commodityCode, int orderCount) {

   int orderMoney = calculate(commodityCode, orderCount);

   accountService.debit(userId, orderMoney);

   Order order = new Order();

   order.userId = userId;

   order.commodityCode = commodityCode;

   order.count = orderCount;

   order.money = orderMoney;

   // INSERT INTO orders ...

   return orderDAO.insert(order);

  

 

  SEATA 的分布式交易解决方案

  我们只需要使用一个 @GlobalTransactional 注解在业务方法上:

  

 

 

   @GlobalTransactional

   public void purchase(String userId, String commodityCode, int orderCount) {

   ......

  

 

  由Dubbo + SEATA提供支持的示例

  步骤 1:建立数据库

  要求:具有InnoDB引擎的MySQL。

  注意: 实际上,在示例用例中,这3个服务应该有3个数据库。 但是,为了简单起见,我们只创建一个数据库并配置3个数据源。

  使用您刚创建的数据库 URL/username/password 修改Spring XML。

  dubbo-account-service.xml

  dubbo-order-service.xml

  dubbo-storage-service.xml

  

 property name="url" value="jdbc:mysql://x.x.x.x:3306/xxx" / 

 

   property name="username" value="xxx" /

   property name="password" value="xxx" /

  

 

  步骤 2:创建 UNDO_LOG 表

  SEATA AT 模式需要 UNDO_LOG 表

  

-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log

 

  CREATE TABLE `undo_log` (

   `id` bigint(20) NOT NULL AUTO_INCREMENT,

   `branch_id` bigint(20) NOT NULL,

   `xid` varchar(100) NOT NULL,

   `context` varchar(128) 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,

   PRIMARY KEY (`id`),

   UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)

  ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

  

 

  步骤 3:为示例业务创建表

  

 

 

  DROP TABLE IF EXISTS `storage_tbl`;

  CREATE TABLE `storage_tbl` (

   `id` int(11) NOT NULL AUTO_INCREMENT,

   `commodity_code` varchar(255) DEFAULT NULL,

   `count` int(11) DEFAULT 0,

   PRIMARY KEY (`id`),

   UNIQUE KEY (`commodity_code`)

  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  以上就是Seata 快速开始()的详细内容,想要了解更多 Seata 快速开始的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: