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

做汽车网站怎么挣钱南京电商网站开发

做汽车网站怎么挣钱,南京电商网站开发,网页版梦幻西游决战华山攻略,兰州口碑营销Seata Sea学习分布式事务Seata二阶段提交协议AT模式TCC模式 Seata服务搭建Seata Server#xff08;事务协调者TC#xff09;环境搭建seata服务搭建-db数据源seata服务搭建-nacos启动seata服务 分布式事务代码搭建-client端搭建接入微服务应用 Sea学习 事务#xff1a;事务是… Seata Sea学习分布式事务Seata二阶段提交协议AT模式TCC模式 Seata服务搭建Seata Server事务协调者TC环境搭建seata服务搭建-db数据源seata服务搭建-nacos启动seata服务 分布式事务代码搭建-client端搭建接入微服务应用 Sea学习 事务事务是访问数据库并更新数据库中各项数据的一个程序执行单元。在关系数据库中一个事务由一组或多组SQL语句组成。事务应该具有4个属性原子性、一致性、隔离性、持久性。例如更新商品的接口这就是一个事务事务是对程序而言的。 原子性事务是一个不可分割的工作单元事务中包括的诸多操作要么都做要么都不做。一致性保持数据的一致隔离性一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的并发执行的各个事务之间不能互相干扰。隔离性又分为四个级别来保证事务之间的隔离性读未提交、读已提交、可重复读、串行化(事务串行执行不会产生并发问题)持久性一个事务执行并提交后就持久到数据库 本地事务大多数场景下我们的应用都只需要操作单一的数据库这种情况下的事务称之为本地事务。本地事务的ACID特性由数据库直接支持。 分布式事务 两种分布式事务场景1、同一服务不同数据库2、同一数据库不同服务此时都会产生分布式事务的问题。此时用本地数据库事务是无法支持分布式事务的。此时用Seata处理分布式事务问题 Seata seata的三大角色 在seata的架构中一共有三个角色 TC:事务协调者TM:事务管理器RM:资源管理器 管理分支事务处理的资源与TC交谈以注册分支事务的状态并驱动分支事务提交或回滚。其中TC为单独部署的server服务端TM和RM为嵌入到应用中的client客户端。 二阶段提交协议 常见的分布式事务解决方案 seata阿里分布式事务框架消息队列sagaXA 他们都有一个共同点都是遵循二阶段协议2PC。两阶段是指完成整个分布式事务划分成两个步骤完成。 1、准备阶段在这个阶段事务的协调者会向所有涉及的数据库或者资源管理器发送准备请求。每个数据库或者资源管理器收到准备请求后会执行相应的操作并且记录准备状态。如果准备成功就向协调者发送准备就绪的ask。协调者等待所有参与者都发送准备就绪的信号如果有任何一个参与者未能准备就绪或者出现了错误协调者将会发送回滚请求给所有参与者。 提交阶段如果所有参与者都准备就绪协调者会向他们发送提交请求。参与者接收到提交请求后会正式提交事务并且释放相关资源。如果有任何一个参与者未能接收到请求或者出现了错误协调者将会发送回滚请求给所有参与者。 图例第一阶段 第二阶段 就像是军训一样准备阶段教官让所有同学都立正站好所有同学都得对齐站好谁没有站好全部同学都得重新立正直到所有同学都准备好然后训练阶段同学们都站一排齐步走只要有一个没走齐的就重新开始已经尽力去解释了我相信即使没有学过计算机的应该也知道这玩意是什么了嘿嘿看着是不是毫无压力 AT模式 一阶段 befrore image:将要更新的数据查询出来。afer image:事务执行后将执行完的数据查出来 二阶段 二阶段提交 因为一阶段已经完成了提交动作所以二阶段如果没有异常则直接删除before image、after image、行锁 二阶段回滚 根据before image拿到逆向sql回滚数据回滚完成后删除befor image、after image、行锁 TCC模式 Seata服务搭建 Seata分TC、TM、RM三个角色其中TC为单独服务端部署TM和RM由业务系统引入依赖来进行集成。 Seata Server事务协调者TC环境搭建 seata服务搭建-db数据源 下载安装包 2.2.5对应的seata包时1.3.0下载地址https://github.com/apache/incubator-seata/releases?page2 修改server端存储模式打开config/file.conf修改mode“db”修改数据库连接信息创建数据库新建表可以去seata提供的资源信息中下载 ## transaction log store, only used in seata-server store {## store mode: file、db、redismode db## database store propertydb {## the implement of javax.sql.DataSource, such as DruidDataSource(druid)/BasicDataSource(dbcp)/HikariDataSource(hikari) etc.datasource druid## mysql/oracle/postgresql/h2/oceanbase etc.dbType mysqldriverClassName com.mysql.jdbc.Driverurl jdbc:mysql://192.168.184.1:3306/seatauser rootpassword 123456minConn 5maxConn 30globalTable global_tablebranchTable branch_tablelockTable lock_tablequeryLimit 100maxWait 5000} }建表sql -- -------------------------------- The script used when storeMode is db -------------------------------- -- the table to store GlobalSession data CREATE TABLE IF NOT EXISTS global_table (xid VARCHAR(128) NOT NULL,transaction_id BIGINT,status TINYINT NOT NULL,application_id VARCHAR(32),transaction_service_group VARCHAR(32),transaction_name VARCHAR(128),timeout INT,begin_time BIGINT,application_data VARCHAR(2000),gmt_create DATETIME,gmt_modified DATETIME,PRIMARY KEY (xid),KEY idx_gmt_modified_status (gmt_modified, status),KEY idx_transaction_id (transaction_id) ) ENGINE InnoDBDEFAULT CHARSET utf8;-- the table to store BranchSession data CREATE TABLE IF NOT EXISTS branch_table (branch_id BIGINT NOT NULL,xid VARCHAR(128) NOT NULL,transaction_id BIGINT,resource_group_id VARCHAR(32),resource_id VARCHAR(256),branch_type VARCHAR(8),status TINYINT,client_id VARCHAR(64),application_data VARCHAR(2000),gmt_create DATETIME(6),gmt_modified DATETIME(6),PRIMARY KEY (branch_id),KEY idx_xid (xid) ) ENGINE InnoDBDEFAULT CHARSET utf8;-- the table to store lock data CREATE TABLE IF NOT EXISTS lock_table (row_key VARCHAR(128) NOT NULL,xid VARCHAR(96),transaction_id BIGINT,branch_id BIGINT NOT NULL,resource_id VARCHAR(256),table_name VARCHAR(32),pk VARCHAR(36),gmt_create DATETIME,gmt_modified DATETIME,PRIMARY KEY (row_key),KEY idx_branch_id (branch_id) ) ENGINE InnoDBDEFAULT CHARSET utf8;seata服务搭建-nacos db存储模式nacos(注册配置中心)部署 步骤5配置Nacos注册中心负责事务参与者(微服务)和TC通信 使用DBNacos的方式部署高可用集群模式 问题seata为何需要注册中心和配置中心 注册中心是事务参与者需要与事务协调者进行通信。配置中心是如果不配置seata会使用默认的配置script/config-center/config.txt文件。使用的配置中心的目的是所有TC都使用nacos配置中心中的配置方便统一管理 将Seata server注册到nacos修改confi目录下的registry.conf配置 registry {# file 、nacos 、eureka、redis、zk、consul、etcd3、sofatype nacosnacos {application seata-serverserverAddr 127.0.0.1:8848group SEATA_GROUPnamespace cluster defaultusername password } }config {# file、nacos 、apollo、zk、consul、etcd3type nacosnacos {serverAddr 127.0.0.1:8848namespace group SEATA_GROUPusername password } }将配置注册到nacos修改confi.txt,还需要将config.txt的数据源改为db,然后通过nacos/nacos-config.sh注册到nacos store.db.urljdbc:mysql://192.168.184.1:3306/seata?useUnicodetrue store.db.userroot store.db.password123456 transport.typeTCP transport.serverNIO transport.heartbeattrue transport.enableClientBatchSendRequestfalse transport.threadFactory.bossThreadPrefixNettyBoss transport.threadFactory.workerThreadPrefixNettyServerNIOWorker transport.threadFactory.serverExecutorThreadPrefixNettyServerBizHandler transport.threadFactory.shareBossWorkerfalse transport.threadFactory.clientSelectorThreadPrefixNettyClientSelector transport.threadFactory.clientSelectorThreadSize1 transport.threadFactory.clientWorkerThreadPrefixNettyClientWorkerThread transport.threadFactory.bossThreadSize1 transport.threadFactory.workerThreadSizedefault transport.shutdown.wait3 service.vgroupMapping.my_test_tx_groupdefault service.default.grouplist127.0.0.1:8091 service.enableDegradefalse service.disableGlobalTransactionfalse client.rm.asyncCommitBufferLimit10000 client.rm.lock.retryInterval10 client.rm.lock.retryTimes30 client.rm.lock.retryPolicyBranchRollbackOnConflicttrue client.rm.reportRetryCount5 client.rm.tableMetaCheckEnablefalse client.rm.sqlParserTypedruid client.rm.reportSuccessEnablefalse client.rm.sagaBranchRegisterEnablefalse client.tm.commitRetryCount5 client.tm.rollbackRetryCount5 client.tm.defaultGlobalTransactionTimeout60000 client.tm.degradeCheckfalse client.tm.degradeCheckAllowTimes10 client.tm.degradeCheckPeriod2000 store.modedb store.db.datasourcedruid store.db.dbTypemysql store.db.driverClassNamecom.mysql.jdbc.Driver store.db.urljdbc:mysql://192.168.184.1:3306/seata?useUnicodetrue store.db.userroot store.db.password123456 store.db.minConn5 store.db.maxConn30 store.db.globalTableglobal_table store.db.branchTablebranch_table store.db.queryLimit100 store.db.lockTablelock_table store.db.maxWait5000 store.redis.host127.0.0.1 store.redis.port6379 store.redis.maxConn10 store.redis.minConn1 store.redis.database0 store.redis.passwordnull store.redis.queryLimit100 server.recovery.committingRetryPeriod1000 server.recovery.asynCommittingRetryPeriod1000 server.recovery.rollbackingRetryPeriod1000 server.recovery.timeoutRetryPeriod1000 server.maxCommitRetryTimeout-1 server.maxRollbackRetryTimeout-1 server.rollbackRetryTimeoutUnlockEnablefalse client.undo.dataValidationtrue client.undo.logSerializationjackson client.undo.onlyCareUpdateColumnstrue server.undo.logSaveDays7 server.undo.logDeletePeriod86400000 client.undo.logTableundo_log client.log.exceptionRate100 transport.serializationseata transport.compressornone metrics.enabledfalse metrics.registryTypecompact metrics.exporterListprometheus metrics.exporterPrometheusPort9898注册配置到nacos 打开\script\config-center\nacos运行nacos-config.sh linux端运行如果是本地sh nacos-config.sh如果nacos在远程sh nacos-config.sh -h 192.168.184.15 -p 8848 执行后 可以看到配置已经注册到了nacos 启动seata服务 sh seata-server.sh -h 192.168.184.15 -p 8091运行seata服务sh seata-server.sh -h 192.168.184.15 -p 8091默认端口号8091 此时可以看到seata服务已经注册到了nacos 分布式事务代码搭建-client端搭建 声明式事务实现GlobalTransactional 接入微服务应用 业务场景 用户下单整个业务逻辑由三个微服务构成 订单服务根据采购需求创建订单。库存服务对给定的商品扣除库存数量 启动seata server端seata server使用nacos作为配置中心和注册中心(上一步已完成) 配置微服务整合seata前置工作新建两个数据库用来测试 在两个库创建两个表 DROP TABLE IF EXISTS order_tbl; CREATE TABLE order_tbl (id int NOT NULL AUTO_INCREMENT,product_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,total_amount int NULL DEFAULT NULL,status varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,PRIMARY KEY (id) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT Dynamic;SET FOREIGN_KEY_CHECKS 1;DROP TABLE IF EXISTS stock_tpl; CREATE TABLE stock_tpl (id int NOT NULL AUTO_INCREMENT,product_id varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,count int NULL DEFAULT NULL,PRIMARY KEY (id) USING BTREE ) ENGINE InnoDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ROW_FORMAT Dynamic;SET FOREIGN_KEY_CHECKS 1;测试项目架构图 具体项目见码云 https://gitee.com/www_zzq_com/springcloud-alibaba_study第一步添加pom依赖 !--添加seata依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-seata/artifactId/dependency第二步各微服务对应的数据库中添加undo_log表 undo_log表作用回滚数据使用 CREATE TABLE IF NOT EXISTS undo_log (branch_id BIGINT(20) NOT NULL COMMENT branch transaction id,xid VARCHAR(100) NOT NULL COMMENT global transaction id,context VARCHAR(128) NOT NULL COMMENT undo_log context,such as serialization,rollback_info LONGBLOB NOT NULL COMMENT rollback info,log_status INT(11) NOT NULL COMMENT 0:normal status,1:defense status,log_created DATETIME(6) NOT NULL COMMENT create datetime,log_modified DATETIME(6) NOT NULL COMMENT modify datetime,UNIQUE KEY ux_undo_log (xid, branch_id) ) ENGINE InnoDBAUTO_INCREMENT 1DEFAULT CHARSET utf8 COMMENT AT transaction mode undo table;第三步配置事务的组 config.txt中配置的分组和客户端必须一一对应 server:port: 8083 spring:application:name: order-seata-servicecloud:nacos:server-addr: 192.168.184.15:8848username: nacospassword: nacosdiscovery:namespace: publicalibaba:seata:tx-service-group: shanghai #配置事务分组第四步 配置文件中进行配置与seata服务进行交互 #seata配置 seata:#seata注册中心registry:#配置seata的注册中心告诉seata client怎么去访问seata servertype: nacosnacos:server-addr: 192.168.184.15:8848 #seata server所在的nacos服务地址application: seata-server #seata server的服务名username: nacospassword: nacos#seata配置中心config:type: nacosnacos:server-addr: 192.168.184.15:8848 #seata server所在的nacos服务地址username: nacospassword: nacos第五步使用在业务方法上添加GlobalTransactional注解 GlobalTransactionalpublic OrderTbl create(OrderTbl orderTbl) {//插入能否成功orderMapper.insertOrder(orderTbl);//扣减库存,能否成功String s stockService.detectStock(orderTbl.getProductId());int a1/0;return orderTbl;}
http://www.hkea.cn/news/14548190/

相关文章:

  • 优化企业网站排名要多少钱如何用ai给网站做logo
  • 厅网站建设项目背景网站集群建设和网站集约化
  • 中国最好的域名注册网站网站建设可以资本化吗
  • 淘宝客网站需要备案网站中查看熊掌号怎么做的
  • 亳州做网站哪家好长春建设
  • app和手机网站wordpress 改成宽屏
  • 网站整体优化常州微信网站建设教程
  • 网站建设公司的重要性北京工程建设交易信息网站
  • 大连建设网节能办公室网站牙科网站模板
  • 做好的网站怎么注销芜湖县住房建设局网站
  • 成都网站建设sntuuhtml5国内网站欣赏
  • 建设旅游网站的功能定位欣赏艺术类的网站
  • 自己做网站卖货多少钱怎么去掉一页wordpress
  • 盐城做网站178网站建设
  • 网站设计多少钱北京网站开发网站建设价格
  • 建设部建造师网站广州前20跨境电商公司
  • 一个网站开发流程图颜金华深圳广告公司
  • 怎么样做一个自己的网站白宫网站 wordpress
  • 企业为什么需要搭建一个网站抚州市做棋牌网站
  • wordpress主题 the7在线优化网站
  • 手机版网站如何做百度网站建设推广
  • 建站哪家好联系兴田德润wordpress怎么生成目录
  • 淮安网站制作设计专业团队张伟图片
  • 资源优化网站排名后缀为net的网站有哪些
  • 微网站建设的第一步是什么公司注册地址与办公地址不一致
  • 网站源码是啥n多国外免费空间
  • 成品网站w灬源码1688手机网站设计咨询
  • 厦门网站的制作品牌咨询
  • 计算机类哪个专业最吃香西安网站优化体验
  • 广州小型企业网站建设46设计网