国外设计素材网站北京新冠确诊最新数据

web/2025/9/28 8:47:14/文章来源:
国外设计素材网站,北京新冠确诊最新数据,益阳北京网站建设,wix如何做网站假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inv…假设我们有一个电商系统,包含订单服务和库存服务。当用户下单时,需要在订单服务中创建订单,同时在库存服务中扣减库存。这是一个典型的分布式事务场景,我们需要保证这两个操作要么都成功,要么都失败,以保证数据的最终一致性。 项目结构: 订单服务(Order Service)库存服务(Inventory Service)本地消息表(Local Message Table)消息恢复系统(Message Recovery System) 核心思想: 使用本地消息表来实现分布式事务。在订单服务中,我们将创建订单和发送消息这两个操作放在一个本地事务中。如果本地事务成功,则订单创建成功,消息也被保存到本地消息表中。然后通过定时任务或消息队列来发送消息到库存服务,实现库存扣减。如果在这个过程中出现任何异常,我们可以通过重试机制来保证最终一致性。 下面是详细的代码实现: 订单服务(Order Service) Service Transactional public class OrderService { Autowired private OrderRepository orderRepository; Autowired private LocalMessageRepository localMessageRepository; Autowired private KafkaTemplateString, String kafkaTemplate; public void createOrder(Order order) { // 开启本地事务 TransactionStatus txStatus transactionManager.getTransaction(new DefaultTransactionDefinition()); try { // 1. 保存订单 orderRepository.save(order); // 2. 创建本地消息 LocalMessage message new LocalMessage(); message.setMessageId(UUID.randomUUID().toString()); message.setMessage(JSON.toJSONString(order)); message.setStatus(NEW); localMessageRepository.save(message); // 3. 提交事务 transactionManager.commit(txStatus); // 4. 发送消息到Kafka kafkaTemplate.send(inventory-topic, message.getMessageId(), message.getMessage()); } catch (Exception e) { // 回滚事务 transactionManager.rollback(txStatus); throw new RuntimeException(Create order failed, e); } } } 库存服务(Inventory Service) Service public class InventoryService { Autowired private InventoryRepository inventoryRepository; KafkaListener(topics inventory-topic) public void handleOrderCreation(ConsumerRecordString, String record) { String messageId record.key(); Order order JSON.parseObject(record.value(), Order.class); try { // 扣减库存 inventoryRepository.decreaseStock(order.getProductId(), order.getQuantity()); // 确认消息处理成功 kafkaTemplate.send(inventory-result-topic, messageId, SUCCESS); } catch (Exception e) { // 消息处理失败,发送失败消息 kafkaTemplate.send(inventory-result-topic, messageId, FAILED); } } } 本地消息表(Local Message Table) Entity Table(name local_message) public class LocalMessage { Id private String messageId; private String message; private String status; // NEW, SENT, CONFIRMED private Date createTime; private Date updateTime; // Getters and setters } 消息恢复系统(Message Recovery System) Component public class MessageRecoverySystem { Autowired private LocalMessageRepository localMessageRepository; Autowired private KafkaTemplateString, String kafkaTemplate; Scheduled(fixedRate 60000) // 每分钟执行一次 public void recoverFailedMessages() { ListLocalMessage failedMessages localMessageRepository.findByStatusAndCreateTimeBefore(NEW, new Date(System.currentTimeMillis() - 300000)); // 5分钟前的消息 for (LocalMessage message : failedMessages) { try { kafkaTemplate.send(inventory-topic, message.getMessageId(), message.getMessage()); message.setStatus(SENT); localMessageRepository.save(message); } catch (Exception e) { // 记录日志,等待下次重试 log.error(Failed to recover message: message.getMessageId(), e); } } } KafkaListener(topics inventory-result-topic) public void handleInventoryResult(ConsumerRecordString, String record) { String messageId record.key(); String result record.value(); LocalMessage message localMessageRepository.findById(messageId).orElse(null); if (message ! null) { if (SUCCESS.equals(result)) { message.setStatus(CONFIRMED); } else { message.setStatus(FAILED); } localMessageRepository.save(message); } } } 代码说明: 订单服务: 在一个本地事务中完成订单创建和本地消息保存。事务成功后,立即发送消息到Kafka。 库存服务: 监听Kafka消息,处理库存扣减。处理结果(成功或失败)通过Kafka反馈给订单服务。 本地消息表: 存储待发送的消息,包括消息ID、内容、状态等信息。 消息恢复系统: 定期检查本地消息表,重新发送失败的消息。监听库存服务的处理结果,更新本地消息状态。 项目亮点: 高可用性: 即使在网络故障或服务宕机的情况下,也能保证消息最终被成功处理。数据一致性: 通过本地事务保证订单创建和消息发送的原子性,再通过消息重试机制保证最终一致性。解耦性: 订单服务和库存服务通过消息进行异步通信,降低了系统耦合度。可靠性: 使用本地消息表作为消息队列的可靠存储,避免了消息丢失的风险。扩展性: 该方案易于扩展,可以方便地增加新的微服务而不影响现有服务。性能: 采用异步处理方式,提高了系统的整体吞吐量。 通过这种方式,我们实现了在分布式系统中保证数据最终一致性的目标,同时保持了系统的高可用性和可扩展性。这种方案特别适用于对实时性要求不是特别高,但对数据一致性有较高要求的业务场景。 系列文章 IT Governance FrameworkIT治理框架12306亿级流量架构分析史上最全京东内部Redis性能优化最佳实践金融级多数据中心灾备互联TOGAF业务架构-CSDN博客如何建设金融数据中心-CSDN博客 互联网Java架构师-CSDN博客 资料下载和预览地址 链接: https://pan.baidu.com/s/1LFyFlsIHCv46DBQRfMGP9A 提取码: kx6b

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83234.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

免费网站站长查询如何建设网站安全管理制度

参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings):这是一个全局范围的设置,会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings):设…

黄金网站软件app大全视频软件 行业门户网站

如果你还不知道“GitHub Copilot”,它是GitHub推出“AI程序员”插件,可以根据你在VS Code输入的部分代码或注释,自动生成完整的代码。在我上次的文章中,演示了GitHub Copilot是如何工作的。刚开始,我对能够试用GitHub …

织梦网站修改幻灯片龙湖建设工程有限公司网站

非常受欢迎的u盘量产工具。最新版拥有分区功能,它把一个U盘分成数个移动盘,更改U盘介质类型(Fixed 和 Removabel)。数码之家量产工具官方版不是数据恢复,是对U盘底层硬件信息的恢复(非硬件损坏),使因为底层硬件信息受损电脑无法识…

临沂手机网站网站后台管理系统界面

文章目录 343. 整数拆分题目描述动态规划 343. 整数拆分 题目描述 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 1: 输入: n 2 输出: 1 解释:…

做网站的软件项目进度计划中国做网站最好的

IDL:接口描述语言这里使用thrift-0.8.0-xsb这个版本来介绍IDL的定义以及简单实例分析。1. namespace 定义包名2.struct 结构体,定义服务接口的参数和返回值用到的类结构。基本类型不需要使用struct.3.service 定义接口:demo.thrift1 namespace java com.…

酷虎云建站重庆市网站建设

目录 引文1.前置条件2.数据接口2.1 UserDao(CRUD)2.2 R工具类 3.HTML 结构3.1 主界面的HTML3.2 用户的查询所有界面的HTML3.3 新增修改通用的的HTML 4.JavaScript 代码4.1 用户的CRUD javaScript 代码(userManage)4.2 新增修改的javaScript代码(userEdit) 5. 运行截图总结 引文…

宁夏建设学院官方网站wordpress自动内链

1. 题目 字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。 示例 1: 输入: first "pale" second "ple" 输出: True示例 2: 输入: first "pa…

盐城网站开发厂商如何注册域名免费

写一个 Android App 或许不难,但企业对于移动应用的要求愈来愈高,不只要求开发速度、稳定度、质量等,甚至希望能具备动态扩展的架构设计、在 App 中自启动小程序。面向这些需求,若是有好的开发工具及平台的支持,将可以…

巢湖市建设工程网站某公司网站建设策划书

服务器模块,是对当前所实现的所有模块的⼀个整合,并进⾏服务器搭建的⼀个模块,最终封装实现出⼀个gobang_server的服务器模块类,向外提供搭建五⼦棋对战服务器的接⼝。通过实例化的对象可以简便的完成服务器的搭建。 服务器框架 …

网站配色设计郑州做网站 熊掌号

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

个人网站规划书成年男女做羞羞视频网站

1.jsonp,原理利用script的src属性(像img,iframe等有src属性的都支持跨域)引入js文件,并在引入成功后调用回调函数,数据通过参数的形式传过来。 例: 2.window.name 3.document.domain 4.h5的方法:window.postMessage 5.flash 6.COR…

dede 后台 不能保存网站名称wordpress my02visitors

1. Java中有哪些主要的集合接口? 答案:Java中主要的集合接口有Collection、List、Set、Queue和Map。 2. 请解释List和Set之间的主要区别。 答案:List和Set的主要区别在于元素的顺序和唯一性。List是有序的集合,允许存储重复的元…

物流wap网站模板wordpress 火

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

郑州市建网站wordpress页面 文章列表

在使用esp32 idf例程中的tcp_server和tcp_client通信测试时发现, 在tcp_server端,接收到一帧数据之后必须马上回复至少一个字节,才能保证每帧数据不粘包, 如果不回复操作,300ms以内的通信时延会导致tcp严重粘包&…

网站换行代码上海哪家网站建设公司好

设计原则 封装、继承、多态、抽象分别可以解决哪些编程问题 封装:也叫做信息隐藏或数据保护访问。数据 通过暴露有限的访问接口,授权外部仅能通过类提供接口访问,对内的类private私有化属性,通过封装简化操作,让用户更…

企业做淘宝网站需要多少钱为什么不建议学电子商务?

一、单选 共40题 (共计40分) 第1题 (1.0分) 题号:7098 难度:中 第1章 下列叙述中正确的是 A:一个算法的空间复杂度大,则其时间复杂度也必定大 B:一个算法的空间复杂度大,则其时间复杂度必定小 C:一个…

婚纱网站建设 最开始中油六建公司官网

相关代码gitee自取: C语言学习日记: 加油努力 (gitee.com) 接上期: 学C的第三十四天【程序环境和预处理】_高高的胖子的博客-CSDN博客 1 . 算法效率 (1). 什么是数据结构: 数据结构(Data Structure)是计算机存储、…

邵阳红网站网站整体设计流程

YB4051H 300mA 单电池锂离子电池充电器0.1 mA 终端,45nA 电池漏电流 概述: YB4051系列设备是高度集成的 Li-lon 和 Li-Pol 线性充电器,针对便携式应用的小容量电池。它是一个完整的恒流/恒压线性充电器。不需要外部感应电阻,由于…

民族团结 网站建设平台广告推广

企业想要管理销售,可以选择CRM系统;企业想要优化业务流程,可以选择CRM系统;企业想要提高收入,可以选择CRM系统。下面来说说,CRM是什么?六种常见CRM系统类型对比。 什么是CRM? CRM是…

苏州模板网站专业设计什么是网站推广?

WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具,在传统工具中一般管理工具缺乏性能压测能力或有性能测试的缺少管理功能;WebBenchmark的设计目标是就管理和性能压测能力同时具备。接下来介绍一下工具的功能和使用&#xff1a…