当前位置: 首页 > news >正文

电子商务大型网站建设佛山百度seo点击软件

电子商务大型网站建设,佛山百度seo点击软件,四川建筑信息平台,我的世界做皮肤的网站SpringBootSeata简单使用 目录seata执行过程安装seata下载seata使用自定义配置文件,NACOS为注册中心结合springboot实现AT模式1.多数据源引入依赖bootstrap.yml配置在使用的方法上用GlobalTransactional注解调用接口正常时调用接口报错时回滚2.配合feignseata优缺点seata执行过…

SpringBoot+Seata简单使用


目录

  • seata执行过程
  • 安装seata
    • 下载seata
    • 使用自定义配置文件,NACOS为注册中心
  • 结合springboot实现AT模式
    • 1.多数据源
      • 引入依赖
      • bootstrap.yml配置
      • 在使用的方法上用@GlobalTransactional注解
      • 调用接口正常时
      • 调用接口报错时回滚
    • 2.配合feign
  • seata优缺点

seata执行过程

在这里插入图片描述
(官网的图)

安装seata

seata官网安装教程

下载seata

我选择了用docker下载选择1.6.1最新的版本,docker-compose启动,有个注意的细节,官网说明了在这里插入图片描述
在这里插入图片描述

docker pull seataio/seata-server:1.6.1

在这里插入图片描述

使用自定义配置文件,NACOS为注册中心

先启动一次把application.yml配置文件放在宿主机中,(注意1.4.2之前是file.conf,配置写法也不相同)

docker run -d -p 8091:8091 -p 7091:7091  --name seata-serve seataio/seata-server:1.6.1
docker cp seata-serve:/seata-server/resources /home/seata/config

拷出后可以,可以选择修改application.yml再cp进容器,或者rm临时容器,如下重新创建,并做好映射路径设置,我选择了删除旧镜像使用docker-compose启动新的镜像。
找到/home/seata/config/resources/application.yml,修改对应的配置,详细配置文件里面有个 application.example.yml可以参考或者上官网查看

在这里插入图片描述

application.yml

server:port: 7091 #界面管理端口spring:application:name: seata-server #应用名称logging:config: classpath:logback-spring.xmlfile:path: ${user.home}/logs/seataextend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstashconsole:user:username: seata #账号password: seata #密码seata:config:# support: nacos, consul, apollo, zk, etcd3 #支持的数据存储类型type: nacos  #选择的数据类型为nacosnacos:server-addr: nacosIP:8848 #nacos地址namespace: seata #nacos命名空间group: SEATA_GROUP #组名usernam: nacos #账号password: xxx #密码data-id: seataServer.properties  #读取的配置文件,官网有registry:# support: nacos, eureka, redis, zk, consul, etcd3, sofatype: nacosnacos:application: seata-serverserver-addr: nacosIP:8848group: SEATA_GROUPnamespace: seata# tc集群名称cluster: defaultusername: nacospassword: xxx #密码#  store:# support: file 、 db 、 redis#    mode: file#  server:#    service-port: 8091 #If not configured, the default is '${server.port} + 1000'security:secretKey: SeataSecretKey0c382ef121d778043159209298fd40bf3850a017tokenValidityInMilliseconds: 1800000ignore:urls: /,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/api/v1/auth/login

dcoker-compose

version: "3"
services:seata-server:image: seataio/seata-server:1.6.1 #镜像container_name: my-seata  #容器名称ports:- "8091:8091"- "7091:7091"environment:#一定要指定store_mode,因为application.yml没指定,如application.yml指定了这可以不指定。如无指定会出现全局数据开启失败的问题- STORE_MODE=db  #指定为数据库,配置文件写在nacos# 以SEATA_IP作为host注册seata server- SEATA_IP=xx.xx.xx.xx  #该IP一定是要服务能访问到的地址- SEATA_PORT=8091   #服务端口           volumes:- "/home/seata/config/resources:/seata-server/resources"- "/usr/share/zoneinfo/Asia/Shanghai:/etc/localtime"        #设置系统时区- "/usr/share/zoneinfo/Asia/Shanghai:/etc/timezone"  #设置时区

nacos上的配置文件seataServer.properties,配置文件官方有官方配置

在这里插入图片描述

store.mode=db
#-----db-----
store.db.datasource=druid 
store.db.dbType=mysql #指定数据库类型
# 需要根据mysql的版本调整driverClassName  
# mysql8及以上版本对应的driver:com.mysql.cj.jdbc.Driver
# mysql8以下版本的driver:com.mysql.jdbc.Driver
store.db.driverClassName=com.mysql.cj.jdbc.Driver #在数据库执行select version()查看版本;
store.db.url=jdbc:mysql://xx.xx.xx.xx:3306/seata-server?useUnicode=true&characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false
store.db.user= root
store.db.password=root
# 数据库初始连接数
store.db.minConn=1
# 数据库最大连接数
store.db.maxConn=20
# 获取连接时最大等待时间 默认5000,单位毫秒
store.db.maxWait=5000
# 全局事务表名 默认global_table
store.db.globalTable=global_table
# 分支事务表名 默认branch_table
store.db.branchTable=branch_table
# 全局锁表名 默认lock_table
store.db.lockTable=lock_table
# 查询全局事务一次的最大条数 默认100
store.db.queryLimit=100# undo保留天数 默认7天,log_status=1(附录3)和未正常清理的undo
server.undo.logSaveDays=7
# undo清理线程间隔时间 默认86400000,单位毫秒
server.undo.logDeletePeriod=86400000
# 二阶段提交重试超时时长 单位ms,s,m,h,d,对应毫秒,秒,分,小时,天,默认毫秒。默认值-1表示无限重试
# 公式: timeout>=now-globalTransactionBeginTime,true表示超时则不再重试
# 注: 达到超时时间后将不会做任何重试,有数据不一致风险,除非业务自行可校准数据,否者慎用
server.maxCommitRetryTimeout=-1
# 二阶段回滚重试超时时长
server.maxRollbackRetryTimeout=-1
# 二阶段提交未完成状态全局事务重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.committingRetryPeriod=1000
# 二阶段异步提交状态重试提交线程间隔时间 默认1000,单位毫秒
server.recovery.asynCommittingRetryPeriod=1000
# 二阶段回滚状态重试回滚线程间隔时间  默认1000,单位毫秒
server.recovery.rollbackingRetryPeriod=1000
# 超时状态检测重试线程间隔时间 默认1000,单位毫秒,检测出超时将全局事务置入回滚会话管理器
server.recovery.timeoutRetryPeriod=1000

在seata使用的数据库上建立这几张表,官方有sql

在这里插入图片描述

CREATE TABLE `branch_table` (`branch_id` bigint NOT NULL,`xid` varchar(128) NOT NULL,`transaction_id` bigint DEFAULT NULL,`resource_group_id` varchar(32) DEFAULT NULL,`resource_id` varchar(256) DEFAULT NULL,`branch_type` varchar(8) DEFAULT NULL,`status` tinyint DEFAULT NULL,`client_id` varchar(64) DEFAULT NULL,`application_data` varchar(2000) DEFAULT NULL,`gmt_create` datetime(6) DEFAULT NULL,`gmt_modified` datetime(6) DEFAULT NULL,PRIMARY KEY (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `distributed_lock` (`lock_key` char(20) NOT NULL,`lock_value` varchar(20) NOT NULL,`expire` bigint DEFAULT NULL,PRIMARY KEY (`lock_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `global_table` (`xid` varchar(128) NOT NULL,`transaction_id` bigint DEFAULT NULL,`status` tinyint NOT NULL,`application_id` varchar(32) DEFAULT NULL,`transaction_service_group` varchar(32) DEFAULT NULL,`transaction_name` varchar(128) DEFAULT NULL,`timeout` int DEFAULT NULL,`begin_time` bigint DEFAULT NULL,`application_data` varchar(2000) DEFAULT NULL,`gmt_create` datetime DEFAULT NULL,`gmt_modified` datetime DEFAULT NULL,PRIMARY KEY (`xid`),KEY `idx_status_gmt_modified` (`status`,`gmt_modified`),KEY `idx_transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;CREATE TABLE `lock_table` (`row_key` varchar(128) NOT NULL,`xid` varchar(128) DEFAULT NULL,`transaction_id` bigint DEFAULT NULL,`branch_id` bigint NOT NULL,`resource_id` varchar(256) DEFAULT NULL,`table_name` varchar(32) DEFAULT NULL,`pk` varchar(36) DEFAULT NULL,`status` tinyint NOT NULL DEFAULT '0' COMMENT '0:locked ,1:rollbacking',`gmt_create` datetime DEFAULT NULL,`gmt_modified` datetime DEFAULT NULL,PRIMARY KEY (`row_key`),KEY `idx_status` (`status`),KEY `idx_branch_id` (`branch_id`),KEY `idx_xid` (`xid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

AT模式还要在对应的业务库加上undo_log表

CREATE TABLE `undo_log` (`id` bigint NOT NULL AUTO_INCREMENT,`branch_id` bigint NOT NULL,`xid` varchar(100) NOT NULL,`context` varchar(128) NOT NULL,`rollback_info` longblob NOT NULL,`log_status` int NOT NULL,`log_created` datetime NOT NULL,`log_modified` datetime NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb3;

docker-compose up -d 后台启动seata
docker logs -f seata-server 查看执行日志

nacos上看到seata服务

IP:7091能登陆seata管理界面

结合springboot实现AT模式


1.多数据源

引入依赖

        <!--多数据源--><dependency><groupId>com.baomidou</groupId><artifactId>dynamic-datasource-spring-boot-starter</artifactId></dependency><!--seata--><dependency><groupId>io.seata</groupId><artifactId>seata-spring-boot-starter</artifactId><version>1.5.2</version></dependency>

bootstrap.yml配置

seata:enabled: true #开启enable-auto-data-source-proxy: false  #关闭数据源代理,这里不关闭会出现事务回滚问题,具体可以查看application-id: ${spring.application.name} # Seata 应用编号,默认为 ${spring.application.name}tx-service-group: mytest-group # Seata 事务组编号,用于 TC 集群名registry:type: nacosnacos:application: seata-serverserver-addr: xx.xx.xx.xx:8848namespace: 332a6313-c96c-4c5d-b3b5-3063093bf8f9group: SEATA_GROUPconfig:type: nacosnacos:server-addr: xx.xx.xx.xx:8848namespace: 332a6313-c96c-4c5d-b3b5-3063093bf8f9group: SEATA_GROUP# 服务配置项,对应 ServiceProperties 类service:# 虚拟组和分组的映射vgroup-mapping:multi-datasource-service-group: default# 分组和 Seata 服务的映射grouplist:default: xx.xx.xx.xx:8091 #seata服务地址

在这里插入图片描述
(图片来源网络)

在使用的方法上用@GlobalTransactional注解

在这里插入图片描述
在这里插入图片描述

调用接口正常时

在这里插入图片描述
在这里插入图片描述
数据能正常拆入2个表中
在这里插入图片描述

调用接口报错时回滚

调用前,远程服务器的remotest表无数据

在这里插入图片描述

执行全局事务,TM申请了XID

在这里插入图片描述
在这里插入图片描述

执行远程数据插入,数据表出现数据的remotest表会删除刚插入的数据

在这里插入图片描述
本地数据库主键冲突报错,会执行全局事务的回滚,发现远程数据库
在这里插入图片描述


2.配合feign

开启2个服务注册到nacos上

在这里插入图片描述

调用方法,TM申请到了XID

在这里插入图片描述

远程服务获取到了相同的xid

在这里插入图片描述

执行完数据操作后,该服务RM会告诉TC执行完成

在这里插入图片描述

本地方法报错RM会告诉TC执行回滚,远程数据的RM也会被告知进行回滚

在这里插入图片描述

feign把xid添加到head中

    String xid = RootContext.getXID();requestTemplate.header(RootContext.KEY_XID, xid);
public class FeignInterceptorConfig implements RequestInterceptor  {Logger log  = LoggerFactory.getLogger(FeignInterceptorConfig.class);public void apply(RequestTemplate requestTemplate) {RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();if (ObjectUtils.isEmpty(requestAttributes)){return ;}ServletRequestAttributes attributes = (ServletRequestAttributes) requestAttributes;HttpServletRequest request = attributes.getRequest();Enumeration<String> headerNames = request.getHeaderNames();//可以在这里将自定义请求头传递进去, key 请求, value 值//处理上游请求头信息,传递时继续携带if (headerNames != null) {while (headerNames.hasMoreElements()) {String name = headerNames.nextElement();String values = request.getHeader(name);// 跳过 content-lengthif ("content-length".equals(name)) {continue;}requestTemplate.header(name, values);}//传递 seata 的 xidString xid = RootContext.getXID();requestTemplate.header(RootContext.KEY_XID, xid);}else {log.info("feign interceptor error header:{}", requestTemplate);}}
}

如果开启了hystrix会导致添加的head失效,因为获取的ServletRequestAttributes是null,要修改hystrix的策略。
参考下文
hystrix开启导致feign添加head失效

feign:hystrix:enabled: true
hystrix:command:default:execution:timeout:#如果enabled设置为false,则请求超时交给ribbon控制enabled: trueisolation:# 隔离策略strategy: SEMAPHORE  thread:timeoutInMilliseconds: 100000

seata优缺点

优点:
1.业务侵入性低
2.TC(事务协调者)服务端能单独部署,利用nacos等注册中心能起多个

在这里插入图片描述
(图片截取于网络)

缺点:

在这里插入图片描述
(图片截取于网络)

http://www.15wanjia.com/news/4658.html

相关文章:

  • 网站开发使用软件环境硬件环境网络广告推广公司
  • 用手机怎样免费做网站重庆seowhy整站优化
  • 海洋高端的专业做网站seo资讯推推蛙
  • 深圳装修公司报价郑州百度seo排名公司
  • 电脑做ppt一般下载哪个网站好企业网站设计价格
  • 直播网站建设模板免费的短视频app大全下载
  • 相机网站建设策划书网络营销策划书论文
  • 全网最低价业务网站济南网络优化厂家
  • 网页美工设计第一步需要做什么seo搜索方法
  • 品牌建设 开鲁网站seo免费版
  • 任县网站制作独立站
  • dedecms模板 中医院网站全套模板营销工具
  • 公司网站建设规划网络推广怎么找客户
  • 深圳做网站做得比较好的公司市场营销的八个理论
  • 为什么需要响应式网站杭州网站优化服务
  • 美食网站联系我们怎么做企业网站seo贵不贵
  • 免费做网站教程关键词首页排名优化价格
  • 东莞商城网站开发郑州网站建设推广
  • 电商网站制作流程百度入驻商家
  • b站推广网站400今日重庆重要消息
  • 免费网站模板的制作方法广东企业网站seo哪里好
  • ssh做的大型网站线上招生引流推广方法
  • 赣州网站设计表白网站制作
  • 网站后面的官网是如何做的seo专家招聘
  • 企业网站 论文今天特大军事新闻
  • 外贸做网站的好处网络营销策划书ppt
  • 张槎建网站服务bt蚂蚁
  • 济南市网站建设百度快照优化的优势是什么
  • 重庆seo网站策划官方百度下载安装
  • 寻找大连网站建设推广页面制作