南昌企业建站模板电商网站项目建设

张小明 2026/1/8 18:57:47
南昌企业建站模板,电商网站项目建设,做淘宝主要看哪些网站有哪些内容,北京高端建设网站目录 参考美团技术团队博客 项目中实现思路 参考美团技术团队博客 两种通用的解决方案#xff1a; 1. 版本号。 2. 状态机。 版本号 举个简单的例子#xff0c;一个产品的状态有上线/下线状态。如果消息1是下线#xff0c;消息2是上线。不巧消息1判重失败#xff0c;被投递…目录参考美团技术团队博客项目中实现思路参考美团技术团队博客两种通用的解决方案 1. 版本号。 2. 状态机。版本号举个简单的例子一个产品的状态有上线/下线状态。如果消息1是下线消息2是上线。不巧消息1判重失败被投递了两次且第二次发生在2之后如果不做重复性判断显然最终状态是错误的。 但是如果每个消息自带一个版本号。上游发送的时候标记消息1版本号是1消息2版本号是2。如果再发送下线消息则版本号标记为3。下游对于每次消息的处理同时维护一个版本号。 每次只接受比当前版本号大的消息。初始版本为0当消息1到达时将版本号更新为1。消息2到来时因为版本号1.可以接收同时更新版本号为2.当另一条下线消息到来时如果版本号是3.则是真实的下线消息。如果是1则是重复投递的消息。 如果业务方只关心消息重复不重复那么问题就已经解决了。但很多时候另一个头疼的问题来了就是消息顺序如果和想象的顺序不一致。比如应该的顺序是12到来的顺序是21。则最后会发生状态错误。 参考TCP/IP协议如果想让乱序的消息最后能够正确的被组织那么就应该只接收比当前版本号大一的消息。并且在一个session周期内要一直保存各个消息的版本号。 如果到来的顺序是21则先把2存起来待1到来后先处理1再处理2这样重复性和顺序性要求就都达到了。。。。基于版本号来处理重复和顺序消息听起来是个不错的主意但凡事总有瑕疵。使用版本号的最大问题是对发送方必须要求消息带业务版本号。下游必须存储消息的版本号对于要严格保证顺序的。https://tech.meituan.com/2016/07/01/mq-design.htmlhttps://tech.meituan.com/2016/07/01/mq-design.html其中参考主要思想参考TCP/IP协议如果想让乱序的消息最后能够正确的被组织那么就应该只接收比当前版本号大一的消息。并且在一个session周期内要一直保存各个消息的版本号。 如果到来的顺序是21则先把2存起来待1到来后先处理1再处理2这样重复性和顺序性要求就都达到了。项目中实现思路消息的顺序性保障不靠中间件去实施在消费者这一侧来实现消息的顺序性。一个broker的topicxxxx 是专门用来发顺序消息的消费者这边收到消息之后全部落库不处理落库成功之后返回ack。利用mysql存消息数据库这边business_key version有唯一索引。重复消息被唯一索引幂等掉。假设发的时 2 1 3 1 4数据库真实存储的是2 1 3 4。消费者这边处理的逻辑伪代码while(ture) { // 查询所有未处理的消息按bussiness_key 和 version 升序排列 ListMessage messages DB.query(SELECT * FROM messages WHERE processed FALSE ORDER BY business_key, version ASC) for(Message msg : messages) { String businessKey msg.getBusinessKey(); int version msg.getVersion(); // 检查是否有上一版本号未处理 boolean preVersionProcessed DB.esists( SELECT 1 FROM messages WHERE business_key ? AND version ? AND processed TRUE, businessKey, version - 1 ); // 如果是version1,直接处理;或者上一个版本已经处理了也可以处理当前版本 if (version 1 || preVersionProcessed) { processMessage(msg); // 标记消息已处理 DB.update(UPDATE message SET processed TRUE WHERE id ?, msg.getId()); } else { continue; } } sleep(5000); }优化点避免重复读取可以使用分布式锁或者加行级锁FOR UPDATE。加上事务机制。ListMessage messages DB.query(SELECT * FROM messages WHERE processed FALSE ORDER BY business_key, version ASC)
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

建一个网站迈年网页设计作业下载

深入理解 Docker 镜像操作与实践 一、Dockerfile 指令详解 1. WORKDIR 指令 WORKDIR 指令用于为后续的 RUN、CMD 和 ENTRYPOINT 指令设置工作目录。在同一个 Dockerfile 中可以多次使用该指令。其语法为: WORKDIR <PATH>使用相对路径时,该路径将相对于之前的 WORK…

张小明 2025/12/26 0:09:40 网站建设

盐城网站优化服务洮南做网站

ATX自动化测试终极指南&#xff1a;从零到精通的完整教程 【免费下载链接】ATX Smart phone automation tool. Support iOS, Android, WebApp and game. 项目地址: https://gitcode.com/gh_mirrors/at/ATX ATX&#xff08;AutomatorX&#xff09;是一款功能强大的智能设…

张小明 2025/12/26 0:09:07 网站建设

网站过期查询宁波自助建站公司

LangFlow开源贡献指南&#xff1a;如何参与项目开发 在大型语言模型&#xff08;LLM&#xff09;技术飞速演进的今天&#xff0c;越来越多开发者希望快速构建智能对话系统、知识问答引擎或自动化代理。然而&#xff0c;即便有如 LangChain 这样强大的框架支撑&#xff0c;编写…

张小明 2025/12/26 0:08:33 网站建设

wordpress自定义站点学校宣传片视频如何制作

Vivado 2022.2 精简安装实战指南&#xff1a;如何用 25GB 搞定 FPGA 开发环境&#xff1f;你是不是也遇到过这样的窘境&#xff1a;下载完 Vivado 2022.2 的安装包&#xff0c;解压后发现动辄60GB 起步&#xff0c;装完连系统盘都快红了&#xff1f;尤其是用笔记本做 FPGA 学习…

张小明 2025/12/26 0:08:00 网站建设

视频网站开发视频教程qq登录wordpress

TypeScript 中 Type 与 Interface 的区别详解 在 TypeScript开发中&#xff0c;type 和 interface 是两种最常用的类型定义方式。它们都能用来描述对象的结构、函数签名等&#xff0c;但在实际使用中却有着微妙而重要的区别。很多初学者甚至有经验的开发者都容易混淆二者。本文…

张小明 2026/1/7 3:00:33 网站建设

环保业网站建设的策划wordpress 滑动相册

QMC音频解码神器&#xff1a;一键解锁加密音乐的全平台解决方案 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 还在为QQ音乐下载的加密音频无法在其他设备播放而烦恼吗&am…

张小明 2025/12/26 0:06:54 网站建设