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

美丽寮步网站建设极致发烧开发公司员工内部销售激励方案

美丽寮步网站建设极致发烧,开发公司员工内部销售激励方案,微信app下载安卓版官方下载,做网站推广和头条推广分布式事务一站式解决方案- 分布式事务一站式解决方案分布式事务产生背景三个概念Seata下载和安装实际业务模拟演示不加 GlobalTransactional 注解#xff0c;正常操作下单不加 GlobalTransactional 注解#xff0c;下单过程出异常或者超时了加 GlobalTransactional 注解GlobalTransactional 注解正常操作下单不加 GlobalTransactional 注解下单过程出异常或者超时了加 GlobalTransactional 注解下单过程出异常或者超时了 原理undo_log 表作用二阶段提交原理分布式事务的执行流程下订单-减库存-账户更新 分布式事务一站式解决方案 分布式事务产生背景 一般来说如果是微服务架构会采用分布式系统开发既然是多个微服务那肯定是有多个独立的数据库的那问题来了 所以迫切希望提供一种分布式事务解决微服务架构下的分布式事务问题 三个概念 Seata下载和安装 下载就不说了直接去官方网站下载最新版本即可注意安装 Seata 之前需要启动 Nacos下载 Nacos 后直接 startup.cmd -m standalone 启动即可。 解压 seata-server-2.0.0.zip 然后进入 conf 目录更改 application.yml 配置如下注意 console.user.username console.user.password seata.security.secretKey seata.security.tokenValidityInMilliseconds 这4个一定要配置不然启动报错 20:37:31.390 WARN --- [ main] [letWebServerApplicationContext] [ refresh] [] : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name webSecurityConfig: Unsatisfied dependency expressed through field userDetailsService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name customUserDetailsServiceImpl: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder console.user.username in value ${console.user.username}20:39:36.510 WARN --- [ main] [letWebServerApplicationContext] [ refresh] [] : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name webSecurityConfig: Unsatisfied dependency expressed through field tokenProvider; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name jwtTokenUtils: Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder seata.security.secretKey in value ${seata.security.secretKey}server:port: 7091 spring:application:name: seata-server logging:config: classpath:logback-spring.xmlfile:path: ${log.home:${user.home}/logs/seata}extend:logstash-appender:destination: 127.0.0.1:4560kafka-appender:bootstrap-servers: 127.0.0.1:9092topic: logback_to_logstash console:user:username: seatapassword: seata seata:security:secretKey: seatatokenValidityInMilliseconds: 1000000config:# support: nacos 、 consul 、 apollo 、 zk 、 etcd3type: nacosnacos:server-addr: 127.0.0.1:8848namespace:group: SEATA_GROUPusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:# data-id: seataServer.propertiesregistry:# support: nacos 、 eureka 、 redis 、 zk 、 consul 、 etcd3 、 sofatype: nacosnacos:application: seata-serverserver-addr: 127.0.0.1:8848group: SEATA_GROUPnamespace:cluster: defaultusername: nacospassword: nacoscontext-path:##if use MSE Nacos with auth, mutex with username/password attribute#access-key:#secret-key:store:# support: file 、 db 、 redis 、 raftmode: dbsession:mode: dblock:mode: dbfile:dir: sessionStoremax-branch-session-size: 16384max-global-session-size: 512file-write-buffer-cache-size: 16384session-reload-read-size: 100flush-disk-mode: asyncdb:datasource: druiddb-type: mysqldriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://192.168.133.128:3306/seata?useUnicodetruerewriteBatchedStatementstrueserverTimezoneGMTuser: rootpassword: rootmin-conn: 10max-conn: 100global-table: global_tablebranch-table: branch_tablelock-table: lock_tabledistributed-lock-table: distributed_lockquery-limit: 1000max-wait: 5000启动成功便可以进入 Seata 前端管理页面 同时 Nacos 也可以看到 Seata 服务注册上来了 实际业务模拟演示 本次学习会用到如下三个模块对应三个微服务每个服务用的单独的数据库其中 cloud-seata-order-service2001 是订单微服务、cloud-seata-storage-service2002 是库存微服务、cloud-seata-account-service2003 是账户微服务具体的代码可以去 github 上获取 项目用的数据库及表如下 初始阶段订单表、库存表、账户表数据如下 不加 GlobalTransactional 注解正常操作下单 实际的业务需求就是 下订单-扣减库存-更新账户余额由于现在是分布式系统如何保证事务呢 先看看正常操作下单1号用户花费100块买了10个1号产品发送如下请求 http://localhost:2001/order/create?userId1productId1count10money100 此时数据库表数据是正常的 不加 GlobalTransactional 注解下单过程出异常或者超时了 假设在下订单-扣减库存-更新账户余额在更新账户余额这一步代码逻辑超时了或者出异常了为什么这里超时设置的是65秒因为 OpenFeign 远程调用的默认超时时间是 60秒 Slf4j Service public class AccountServiceImpl implements AccountService {Resourceprivate AccountMapper accountMapper;Overridepublic void decrease(Long userId, Long money) {log.info(-------------AccountService 开始扣减余额);accountMapper.decrease(userId, money);log.info(-------------AccountService 开始扣减余额);// 超时异常timeout();// 抛出异常// int i 10 / 0;}private void timeout() {try {TimeUnit.SECONDS.sleep(65);} catch (InterruptedException e) {throw new RuntimeException(e);}} }重启项目再发送一次请求发现页面提示超时了被全局异常捕获 查看表数据发现库存扣减了余额扣减了但是订单状态是创建中…这显然是有问题的 加 GlobalTransactional 注解下单过程出异常或者超时了 同样的过程有了 GlobalTransactional 后经过测试正常下单没问题下单过程出异常或者超时了数据库正确回滚结果符合预期 Override // 微服务项目可能会有多个方法需要保证分布式事务name 可以很好的区分 GlobalTransactional(name create-order-transaction, rollbackFor Exception.class) public void create(Order order) {// xid全局事务检查String xid RootContext.getXID();// 1. 新建订单log.info(------------- 开始新建订单, XID: {}, xid);order.setStatus(0);int result orderMapper.insertSelective(order);Order orderFromDB;if (result 0) {orderFromDB orderMapper.selectOne(order);log.info(------------- 新建订单成功, OrderInfo: {}, orderFromDB);// 2. 扣减库存log.info(------------- 开始扣减库存);storageFeignApi.decrease(orderFromDB.getProductId(), orderFromDB.getCount());log.info(------------- 扣减库存成功);// 3. 扣减账户余额log.info(------------- 开始扣减余额);accountFeignApi.decrease(order.getUserId(), order.getMoney());log.info(------------- 扣余额存成功);// 4. 修改订单状态log.info(------------- 开始修改订单状态);Example whereCondition new Example(Order.class);Example.Criteria criteria whereCondition.createCriteria();criteria.andEqualTo(id, orderFromDB.getId());criteria.andEqualTo(status, 0);orderFromDB.setStatus(1);int updateResult orderMapper.updateByExampleSelective(orderFromDB, whereCondition);log.info(------------- 修改订单状态成功);}log.info(------------- 结束新建订单, XID: {}, xid); }原理 答案就是 二阶段提交从日志输出也可以看到PhaseTwo_Rollbacked-二阶段回滚了… 2024-08-07T21:59:43.44108:00 INFO 26572 --- [seata-account-service] [nio-2003-exec-2] e.wong.service.impl.AccountServiceImpl : -------------AccountService 开始扣减余额 2024-08-07T22:00:43.50008:00 INFO 26572 --- [seata-account-service] [h_RMROLE_1_1_24] i.s.c.r.p.c.RmBranchRollbackProcessor : rm handle branch rollback process:BranchRollbackRequest{xid192.168.133.1:8091:2414480718769926145, branchId2414480718769926148, branchTypeAT, resourceIdjdbc:mysql://192.168.133.128:3306/seata_account, applicationDatanull} 2024-08-07T22:00:43.50108:00 INFO 26572 --- [seata-account-service] [h_RMROLE_1_1_24] io.seata.rm.AbstractRMHandler : Branch Rollbacking: 192.168.133.1:8091:2414480718769926145 2414480718769926148 jdbc:mysql://192.168.133.128:3306/seata_account 2024-08-07T22:00:43.54208:00 INFO 26572 --- [seata-account-service] [h_RMROLE_1_1_24] i.s.r.d.undo.AbstractUndoLogManager : xid 192.168.133.1:8091:2414480718769926145 branch 2414480718769926148, undo_log deleted with GlobalFinished 2024-08-07T22:00:43.54308:00 INFO 26572 --- [seata-account-service] [h_RMROLE_1_1_24] i.seata.rm.datasource.DataSourceManager : branch rollback success, xid:192.168.133.1:8091:2414480718769926145, branchId:2414480718769926148 2024-08-07T22:00:43.54308:00 INFO 26572 --- [seata-account-service] [h_RMROLE_1_1_24] io.seata.rm.AbstractRMHandler : Branch Rollbacked result: PhaseTwo_Rollbackedundo_log 表作用 而且上面你会发现每个微服务数据库都有张 undo_log 表这个是做什么的呢 在订单业务方法加了GlobalTransactional 注解后打开 65 秒注释目的是观察中间状态重新请求 http://localhost:2001/order/create?userId1productId1count10money100打开 undo_log 表发现此时有数据 JSON 格式化后结构如下 当然此时在 Seata 管理页面也可以看到分布式事务中间状态的数据 不过 undo_log 表的数据在事务成功提交或者回滚之后在自动删除 二阶段提交原理 第一阶段 二阶段有分成两种情况正常提交和异常回滚 分布式事务的执行流程下订单-减库存-账户更新
http://www.w-s-a.com/news/605957/

相关文章:

  • 网站资质优化ip地址域名解析
  • 如何搭建个人网站ps做网站首页怎么运用起来
  • 中小企业商务网站建设wordpress 安全加固
  • asp网站开发设计文档php建设网站怎么用
  • 服装公司网站建设需求分析报告seo搜索引擎优化实战
  • wordpress 扒站最近最新新闻
  • 手机wap网站开发与设计wordpress域名无法访问
  • 百度收录网站收费吗做网站用vs还是dw
  • 维度网络专业做网站嘉兴网站建设方案服务
  • 成品电影网站建设中国最顶尖设计师
  • 网站建设报价清单明细视频网站如何做营销
  • 建设农业网站的论文做国外网站有哪些
  • 怎么做网页 网站制作张家港网站制作哪家好
  • 创世网站建设公司书籍封面设计网站
  • 国外优秀网站设计欣赏小程序推广赚佣金
  • 徐州人才网官方网站邯郸seo优化公司
  • 海南响应式网站建设哪里好瑞安电影城网站建设
  • wordpress widgetkit济南优化网站厂家
  • 麦片网站建设佛山短视频推广渠道
  • 免费自助建网站销售的网络建设
  • 传媒大气的网站网站怎么做分类聚合
  • 网站可以自己备案吗crm系统架构图
  • 罗湖网站建设58做网站的公司盐城
  • 网站开发答辩想要去网站做友情链接怎么发邮件
  • 网站名称填写什么广告网络推广怎么做
  • 做网站架构需要注意什么百度竞价排名推广
  • 网站接口设置地税局内网网站建设
  • 谷歌提交网站入口wordpress前台自动登录
  • 规模以上工业企业的标准是什么洛阳霞光seo网络公司
  • 怎样用文本建一个网站做美容美发学校网站公司