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

建设人才信息网是什么网站wordpress 缓存

建设人才信息网是什么网站,wordpress 缓存,做网站可以不用框架吗,中国最好的建筑公司文章目录 1. 业务介绍1.1. 用例1.2. 架构图1.3. 3个服务的代码及业务逻辑#xff08;略#xff09; 2. SEATA 的分布式交易解决方案3. 由Dubbo SEATA提供支持的示例#xff08;实战#xff09;3.1. 步骤 1#xff1a;建立数据库#xff0c;如seata数据库3.2. 步骤 2略 2. SEATA 的分布式交易解决方案3. 由Dubbo SEATA提供支持的示例实战3.1. 步骤 1建立数据库如seata数据库3.2. 步骤 2创建 UNDO_LOG 表3.3. 步骤 3为示例业务创建表3.4. 步骤 4: 启动服务3.5. 步骤 5: 运行示例3.6. 测试3.6.1. 正常执行3.6.2. 模拟异常发生3.6.3. 原理简述 本文是介绍官方的seata入门案例采用的是 微服务架构参考地址https://seata.io/zh-cn/docs/user/quickstart/。 代码详细地址https://github.com/seata/seata-samples/tree/master/dubbo。 整个seata-samples代码库很大本例只用到了dubbo子模块。 1. 业务介绍 1.1. 用例 本业务以购买商品的业务逻辑为例子。整个业务涉及到3个微服务一起提供服务 仓储服务对给定的商品扣除仓储数量。订单服务根据采购需求创建订单。帐户服务从用户帐户中扣除余额。 1.2. 架构图 1.3. 3个服务的代码及业务逻辑略 2. SEATA 的分布式交易解决方案 我们只需要使用一个 GlobalTransactional 注解在业务方法上: GlobalTransactionalpublic void purchase(String userId, String commodityCode, int orderCount) {......}备注 1、每个微服务都与seata服务连接起来可以看每个服务的xxx-service.xml。如dubbo-storage-service.xml文件。其他服务也一样 bean idstorageDataSourceProxy classio.seata.rm.datasource.DataSourceProxyconstructor-arg refstorageDataSource //beanbean namestorageDataSource classcom.alibaba.druid.pool.DruidDataSourceinit-methodinit destroy-methodcloseproperty nameurl value${jdbc.storage.url}/property nameusername value${jdbc.storage.username}/property namepassword value${jdbc.storage.password}/property namedriverClassName value${jdbc.storage.driver}//bean2、每个服务都注册了一个GlobalTransactionScanner字符串dubbo-demo-storage-service表示应用IDapplicationId字符串my_test_tx_group表示事务服务组txServiceGroup bean classio.seata.spring.annotation.GlobalTransactionScannerconstructor-arg valuedubbo-demo-storage-service/constructor-arg valuemy_test_tx_group//bean3、字符串my_test_tx_group还在项目的file.conf文件中还用到了。 3. 由Dubbo SEATA提供支持的示例实战 建议参考代码https://github.com/seata/seata-samples/tree/master/dubbo的readme.md文件。 3.1. 步骤 1建立数据库如seata数据库 略 3.2. 步骤 2创建 UNDO_LOG 表 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) ) ENGINEInnoDB AUTO_INCREMENT1 DEFAULT CHARSETutf8;3.3. 步骤 3为示例业务创建表 略 3.4. 步骤 4: 启动服务 # 启动seata服务 docker run --name seata-file -p 8091:8091 hellowoodes/seata:0.9.0-file # 启动zooekper docker run --name zookeeper -p 2181:2181 -p 2888:2888 -p 3888:3888 -d zookeeper3.5. 步骤 5: 运行示例 注意作者下载代码测试的时候以下应用都不能启动后查阅资料发现是缺少了jar包请在启动出问题的时候在pom.xml中添加jar包。 dependencygroupIdcom.alibaba.spring/groupIdartifactIdspring-context-support/artifactIdversion1.0.11/version /dependency启动 DubboAccountServiceStarter启动 DubboStorageServiceStarter启动 DubboOrderServiceStarter运行 DubboBusinessTester for demo test 3.6. 测试 一共设计到3张表初始状态下库存storage_tbl存储了100个库存订单表order_tbl为空账户表account_tbl有999元。测试类模拟了用户购买了2件200元的商品。 3.6.1. 正常执行 如果一切正常那么 1、account_tbl表账户余额为999 - 200*2 599元 2、order_tbl表会生成一个订单 3、storage_tbl表的库存为100 - 2 98 测试结果如下图 3.6.2. 模拟异常发生 在业务方法上加了GlobalTransactional注解如果分布式事务生效那么在发生异常Exception时3张表的数据都会回滚值还是初始值即 1、account_tbl表为999元 2、order_tbl是空的 3、storage_tbl是100件 添加模拟发生异常的代码 查看测试结果如下图 观察到控制台发生了一场且数据库中3张表的数据没有变动。 3.6.3. 原理简述 全部3个微服务全部debug启动且基于架构图Account服务是最后调用的在该服务上打上一个断点。然后去观察undo_log表中的内容。注意超时时间哦。 1、打上断点 在io.seata.samples.dubbo.service.impl.OrderServiceImpl#create的最后位置打上断点 2、观察undo_log表 备注刚好3条记录对应3张表变更前后的内容blob的内容查看需要再navicat中设置一下然后复制格式化成json。 3、观察3张表的数据 下面是账户余额表account_tbl变更前后的数据情况json格式化后 {class: io.seata.rm.datasource.undo.BranchUndoLog,xid: 172.17.0.4:8091:2151716199,branchId: 2151716201,sqlUndoLogs: [java.util.ArrayList,[{class: io.seata.rm.datasource.undo.SQLUndoLog,sqlType: UPDATE,tableName: account_tbl,beforeImage: {class: io.seata.rm.datasource.sql.struct.TableRecords,tableName: account_tbl,rows: [java.util.ArrayList,[{class: io.seata.rm.datasource.sql.struct.Row,fields: [java.util.ArrayList,[{class: io.seata.rm.datasource.sql.struct.Field,name: id,keyType: PRIMARY_KEY,type: 4,value: 2},{class: io.seata.rm.datasource.sql.struct.Field,name: money,keyType: NULL,type: 4,value: 999}]]}]]},afterImage: {class: io.seata.rm.datasource.sql.struct.TableRecords,tableName: account_tbl,rows: [java.util.ArrayList,[{class: io.seata.rm.datasource.sql.struct.Row,fields: [java.util.ArrayList,[{class: io.seata.rm.datasource.sql.struct.Field,name: id,keyType: PRIMARY_KEY,type: 4,value: 2},{class: io.seata.rm.datasource.sql.struct.Field,name: money,keyType: NULL,type: 4,value: 599}]]}]]}}]] }下面是订单表order_tbl {class:io.seata.rm.datasource.undo.BranchUndoLog,xid:172.17.0.4:8091:2151716242,branchId:2151716245,sqlUndoLogs:[java.util.ArrayList,[{class:io.seata.rm.datasource.undo.SQLUndoLog,sqlType:INSERT,tableName:order_tbl,beforeImage:{class:io.seata.rm.datasource.sql.struct.TableRecords$EmptyTableRecords,tableName:order_tbl,rows:[java.util.ArrayList,[]]},afterImage:{class:io.seata.rm.datasource.sql.struct.TableRecords,tableName:order_tbl,rows:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Row,fields:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Field,name:id,keyType:PRIMARY_KEY,type:4,value:6},{class:io.seata.rm.datasource.sql.struct.Field,name:user_id,keyType:NULL,type:12,value:U100001},{class:io.seata.rm.datasource.sql.struct.Field,name:commodity_code,keyType:NULL,type:12,value:C00321},{class:io.seata.rm.datasource.sql.struct.Field,name:count,keyType:NULL,type:4,value:2},{class:io.seata.rm.datasource.sql.struct.Field,name:money,keyType:NULL,type:4,value:400}]]}]]}}]]}下面是库存表storage_tbl {class:io.seata.rm.datasource.undo.BranchUndoLog,xid:172.17.0.4:8091:2151716242,branchId:2151716243,sqlUndoLogs:[java.util.ArrayList,[{class:io.seata.rm.datasource.undo.SQLUndoLog,sqlType:UPDATE,tableName:storage_tbl,beforeImage:{class:io.seata.rm.datasource.sql.struct.TableRecords,tableName:storage_tbl,rows:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Row,fields:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Field,name:id,keyType:PRIMARY_KEY,type:4,value:2},{class:io.seata.rm.datasource.sql.struct.Field,name:count,keyType:NULL,type:4,value:100}]]}]]},afterImage:{class:io.seata.rm.datasource.sql.struct.TableRecords,tableName:storage_tbl,rows:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Row,fields:[java.util.ArrayList,[{class:io.seata.rm.datasource.sql.struct.Field,name:id,keyType:PRIMARY_KEY,type:4,value:2},{class:io.seata.rm.datasource.sql.struct.Field,name:count,keyType:NULL,type:4,value:98}]]}]]}}]]}
http://www.pierceye.com/news/57844/

相关文章:

  • python做网站安全性二类电商平台
  • 推荐做问卷的网站个人音乐网站免费建设
  • 开江网站建设沼气服务网站建设管理
  • sns网站是什么app界面设计欣赏网站
  • 可以做动画的网站做外贸有必要做个网站吗
  • 站酷设计官网网站建设推广
  • 网站建设是无形资产东台哪家专业做网站
  • 网站开发语言php5.1大连建设工程信息网登陆
  • 轴承网站建设网页开发基础知识
  • 什么叫网站建设四网合一服装设计软件有哪些软件
  • 国外字体设计网站如何搭建一个自己上传视频的网站
  • 电商网站开发用什么软件好陶瓷行业网站建设招标书
  • 六安市城市建设档案馆网站北京seo公司有哪些
  • 陕西通达工程建设有限公司网站平台商业模式有哪些
  • vue做网站首页深圳高端网站定制建设
  • 无锡网络公司无锡网站制作wordpress有什么缺点
  • 福建微网站建设价格郴州做网站的
  • 唐山中小企业网站制作公司装修怎么样
  • 漳浦网站设计天元建设集团有限公司成立时间
  • 招聘 网站开发wordpress调用文章描述
  • 网站开发规划书scrm和crm如何配合
  • cnzz 网站域名怎么填宣传页在线设计软件
  • 沈阳模板建站固镇做网站多少钱
  • 三桥做网站国内外包网站
  • 百度权重查询爱站网做药的文献一般在哪些网站查找
  • 电子商务网站和普通网站的区别有用cc域名做网站的
  • 上海网站建设优化价格网站语言切换功能如何做
  • 网站备案营业执照星际网络泰安网络公司
  • 建站哪家好就要用兴田德润南通专业网站制作
  • 杭州百度seo宁波seo关键词优化设计