Seata部署指南(seata部署在docker)

  本篇文章为你整理了Seata部署指南(seata部署在docker)的详细内容,包含有seatable 部署 seata部署在docker seafile 部署 sealos部署 Seata部署指南,希望能帮助你了解 Seata部署指南。

  各个配置中心参数导入脚本,config.txt(包含server和client,原名nacos-config.txt)为通用参数文件

  
server端数据库脚本 (包含 lock_table、branch_table 与 global_table) 及各个容器配置

  seata-spring-boot-starter

  

内置GlobalTransactionScanner自动初始化功能,若外部实现初始化,请参考SeataAutoConfiguration保证依赖加载顺序

 

  默认开启数据源自动代理,可配置seata.enable-auto-data-source-proxy: false关闭

  

 

  spring-cloud-starter-alibaba-seata

  
查看版本说明

  2.1.0内嵌seata-all 0.7.1,2.1.1内嵌seata-all 0.9.0,2.2.0内嵌seata-spring-boot-starter 1.0.0, 2.2.1内嵌seata-spring-boot-starter 1.1.0

  

 2.1.0和2.1.1兼容starter解决方案:

 

  @SpringBootApplication注解内exclude掉spring-cloud-starter-alibaba-seata内的com.alibaba.cloud.seata.GlobalTransactionAutoConfiguration

  

 

  spring-cloud-starter-alibaba-seata推荐依赖配置方式

  

 dependency 

 

   groupId io.seata /groupId

   artifactId seata-spring-boot-starter /artifactId

   version 最新版 /version

   /dependency

   dependency

   groupId com.alibaba.cloud /groupId

   artifactId spring-cloud-starter-alibaba-seata /artifactId

   version 最新版本 /version

   exclusions

   exclusion

   groupId io.seata /groupId

   artifactId seata-spring-boot-starter /artifactId

   /exclusion

   /exclusions

   /dependency

  

 

  启动Server

  Server端存储模式(store.mode)现有file、db、redis三种(后续将引入raft,mongodb),file模式无需改动,直接启动即可,下面专门讲下db和redis启动步骤。
 

  注: file模式为单机模式,全局事务会话信息内存中读写并持久化本地文件root.data,性能较高;

  db模式为高可用模式,全局事务会话信息通过db共享,相应性能差些;

  redis模式Seata-Server 1.3及以上版本支持,性能较高,存在事务信息丢失风险,请提前配置合适当前场景的redis持久化配置.

  步骤一:启动包

  点击下载

  官方钉钉群(群号:23171167,1群5000人已满,2群, 3群: 32033786),qq群(群号: 254657148,2群: 216012363)群文件共享下载

  步骤二:建表(仅db)

  全局事务会话信息由3块内容构成,全局事务-- 分支事务-- 全局锁,对应表global_table、branch_table、lock_table

  步骤三:修改store.mode

  启动包: seata-- conf-- application.yml,修改store.mode= db或者redis
 

  源码: 根目录-- seata-server-- resources-- application.yml,修改store.mode= db或者redis

  1.5.0以下版本:

  启动包: seata-- conf-- file.conf,修改store.mode= db或者redis
 

  源码: 根目录-- seata-server-- resources-- file.conf,修改store.mode= db或者redis

  步骤四:修改数据库连接redis属性配置

  启动包: seata-- conf-- application.example.yml中附带额外配置,将其dbredis相关配置复制至application.yml,进行修改store.db或store.redis相关属性。
 

  源码: 根目录-- seata-server-- resources-- application.example.yml中附带额外配置,将其dbredis相关配置复制至application.yml,进行修改store.db或store.redis相关属性。

  1.5.0以下版本:

  启动包: seata-- conf-- file.conf,修改store.db或store.redis相关属性。
 

  源码: 根目录-- seata-server-- resources-- file.conf,修改store.db或store.redis相关属性。

  步骤五:启动

  源码启动: 执行ServerApplication.java的main方法

  命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db

  1.5.0以下版本

  源码启动: 执行Server.java的main方法

  命令启动: seata-server.sh -h 127.0.0.1 -p 8091 -m db -n 1 -e test

  

 -h: 注册到注册中心的ip

 

   -p: Server rpc 监听端口

   -m: 全局事务会话信息存储模式,file、db、redis,优先读取启动参数 (Seata-Server 1.3及以上版本支持redis)

   -n: Server node,多个Server时,需区分各自节点,用于生成不同区间的transactionId,以免冲突

   -e: 多环境配置参考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html

  

 

  点击查看docker部署

  注: 堆内存建议分配2G,堆外内存1G

  业务系统集成Client

  步骤一:添加seata依赖(建议单选)

  依赖seata-all

  依赖seata-spring-boot-starter,支持yml、properties配置(.conf可删除),内部已依赖seata-all

  依赖spring-cloud-alibaba-seata,内部集成了seata,并实现了xid传递

  步骤二:undo_log建表、配置参数(仅AT模式)

  查看参数配置介绍

  步骤三:数据源代理(不支持自动和手动配置并存)

  
0.9.0版本开始seata支持自动代理数据源

  

1.1.0: seata-all取消属性配置,改由注解@EnableAutoDataSourceProxy开启,并可选择jdk proxy或者cglib proxy

 

  1.0.0: client.support.spring.datasource.autoproxy=true

  0.9.0: support.spring.datasource.autoproxy=true

  

 

  如果采用XA模式,@EnableAutoDataSourceProxy(dataSourceProxyMode = XA )

  
使用自动代理数据源时,如果使用XA模式还需要调整配置文件
 

  application.properties

  

seata.data-source-proxy-mode=XA 

 

  

 

  application.yml

  

seata:

 

   data-source-proxy-mode: XA

  

 

  
public GlobalTransactionScanner globalTransactionScanner() {

   String applicationName = this.applicationContext.getEnvironment().getProperty( spring.application.name

   String txServiceGroup = this.seataProperties.getTxServiceGroup();

   if (StringUtils.isEmpty(txServiceGroup)) {

   txServiceGroup = applicationName + -fescar-service-group

   this.seataProperties.setTxServiceGroup(txServiceGroup);

   return new GlobalTransactionScanner(applicationName, txServiceGroup);

  

 

 

  自动,引入seata-spring-boot-starter、spring-cloud-starter-alibaba-seata等jar

  步骤五:实现xid跨服务传递

  参考源码integration文件夹下的各种rpc实现 module

  springCloud用户可以引入spring-cloud-starter-alibaba-seata,内部已经实现xid传递

  

@GetMapping(value = "testCommit")

 

  @GlobalTransactional

  public Object testCommit(@RequestParam(name = "id",defaultValue = "1") Integer id,

   @RequestParam(name = "sum", defaultValue = "1") Integer sum) {

   Boolean ok = productService.reduceStock(id, sum);

   if (ok) {

   LocalDateTime now = LocalDateTime.now();

   Orders orders = new Orders();

   orders.setCreateTime(now);

   orders.setProductId(id);

   orders.setReplaceTime(now);

   orders.setSum(sum);

   orderService.save(orders);

   return "ok";

   } else {

   return "fail";

  

 

  

/**

 

   * 定义两阶段提交 name = 该tcc的bean名称,全局唯一 commitMethod = commit 为二阶段确认方法 rollbackMethod = rollback 为二阶段取消方法

   * useTCCFence=true 为开启防悬挂

   * BusinessActionContextParameter注解 传递参数到二阶段中

   * @param params -入参

   * @return String

  @TwoPhaseBusinessAction(name = "beanName", commitMethod = "commit", rollbackMethod = "rollback", useTCCFence = true)

  public void insert(@BusinessActionContextParameter(paramName = "params") Map String, String params) {

   logger.info("此处可以预留资源,或者利用tcc的特点,与AT混用,二阶段时利用一阶段在此处存放的消息,通过二阶段发出,比如redis,mq等操作");

   * 确认方法、可以另命名,但要保证与commitMethod一致 context可以传递try方法的参数

   * @param context 上下文

   * @return boolean

  public void commit(BusinessActionContext context) {

   logger.info("预留资源真正处理,或者发出mq消息和redis入库");

   * 二阶段取消方法

   * @param context 上下文

   * @return boolean

  public void rollback(BusinessActionContext context) {

   logger.info("预留资源释放,或清除一阶段准备让二阶段提交时发出的消息缓存");

  

 

  切点表达式

  

 @Bean

 

   public AspectTransactionalInterceptor aspectTransactionalInterceptor () {

   return new AspectTransactionalInterceptor();

   @Bean

   public Advisor txAdviceAdvisor(AspectTransactionalInterceptor aspectTransactionalInterceptor ) {

   AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();

   pointcut.setExpression("配置切点表达式使全局事务拦截器生效");

   return new DefaultPointcutAdvisor(pointcut, aspectTransactionalInterceptor);

  

 

  website powered by docsite

  愿景Seata 是一款阿里巴巴开源的分布式事务解决方案,致力于在微服务架构下提供高性能和简单易用的分布式事务服务。

  文档Seata 是什么?快速开始报告文档问题在Github上编辑此文档资源博客社区中文版英文版Copyright © 2022 Seata

  以上就是Seata部署指南(seata部署在docker)的详细内容,想要了解更多 Seata部署指南的内容,请持续关注盛行IT软件开发工作室。

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

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