这里写自定义目录标题   转载:前阵子从支付宝转账1万块钱到余额宝,这是日常生活的一件普通小事,但作为互联网研发人员的职业病,我就思考支付宝扣除1万之后,如果系统挂掉怎么办,这时余额宝账户并没有增加1万,数据就会出现不一致状况了。上述场景在各个类型的系统中都能找到相似影子,比如在电商系统中,当有用户下单后,除了在订单表插入一条记录外,对应商品表的这个商品数量必须减1吧,怎么保证?!在搜索广告系统            
                
         
            
            
            
              前言:关于消息队列应该大家都不陌生,在实际的项目中消息队列也无处不在,今天我和大家分享一下关于消息队列的问题。1、消息队列定义消息队列大家又经常称为MQ(message queue),从字面的含义来看就是一个存放消息的容器。2、消息队列应用场景2.1、异步处理2.2、系统解耦2.3、流量削峰 3、消息队列顺序性  提到mq那么我们必然会讨论mq顺序性问题            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-26 10:39:59
                            
                                109阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            巩固基础,砥砺前行 。 只有不断重复,才能做到超越自己。 能坚持把简单的事情做到极致,也是不容易的。面试题项目上用过消息队列吗?用过哪些?当初选型基于什么考虑的呢?面试官心理分析 第一,你知不知道你们系统里为什么要用消息队列这个东西? 不少候选人,说自己项目里用了Redis、MQ,但是其实他并不知道自己为什么要用这个东西。其实说白了,就是为了用而用,或者是别人 设计的架构,他从头到尾都没思考过。            
                
         
            
            
            
            如何可靠保存凭证(消息)有两种方法:业务与消息耦合的方式支付宝在完成扣款的同时,同时记录消息数据,这个消息数据与业务数据保存在同一数据库实例里(消息记录表表名为message); Begin           transaction         
                    update           A           set           amount=amo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-26 11:39:10
                            
                                29阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            消息队列技术的应用1、解耦:消息队列要解决本质问题2、广播模式:消息队列的基本功能之一,有了消息队列,只需要关心消息是否送达了队列,至于谁需要订阅,是下游消费者的事情,极大地减少了开发和联调的工作量3、错峰和控流:秒杀业务用于流量削峰场景(流量削峰)4、最终一致性:最终一致性指的是两个系统的状态保持一致,要么都成功,要么都失败。这不是消息队列的必备特性,但可以借此实现最终一致性问题 消息            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-16 14:15:07
                            
                                63阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            如果我们要在服务化拆分中使用消息队列,那么我们需要解决哪些问题呢?首先去哪儿网提供了旅游产品在线预订服务,那么就涉及电商交易,在电商交易中我们认为数据的一致性是非常关键的要素。那么我们的 MQ 必须提供一致性保证。MQ 提供一致性保证又分为两个方面。发消息时我们如何确保业务操作和发消息是一致的,也就是不能出现业务操作成功消息未发出或者消息发出了但是业务并没有成功的情况。举例来说,支付服务使用消息通            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-03-19 10:32:20
                            
                                30阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            虽然本文并非笔者原创,但是我们在非强依赖的事务中原理上也是采用这种方式处理的,不过因为没有仔细去总结,最近在整理和总结时看到了,故转载并做部分根据我们实际情况的完善和补充。不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-06-02 16:16:59
                            
                                59阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            什么是消息一致性所谓消息收发一致性,一般指的是消息的时序一致性,也就是保证消息不会乱序对于点对点的聊天场景,时序一致性需要保证接收方的接收顺序和发送方的发送顺序一致对于群组聊天,时序一致性保证的是群里所有接收人看到的消息展现顺序都一样为什么保证消息的时序一致性很困难从理论上来说,保证消息的时序一致性貌似并不难。理论上,我们想象中的消息收发场景中,只有单一的发送方、单一的接收方。如果发送方和接收方的            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-07-09 16:55:05
                            
                                57阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            对于消息队列来说,它最核心的功能就是收发消息。也就是消息生产和消费这两个流程。我们在之前的课程中提到了消息队列一些常见问题,比如,“如何保证消息不会丢失?”“为什么会收到重复消息?”“消费时为什么要先执行消费业务逻辑再确认消费?”,针对这些问题,我讲过它们的实现原理,这些最终落地到代码上,都包含在这一收一发两个流程中。在接下来的两节课中,我会带你一起通过分析源码的方式,详细学习一下这两个流程到底是            
                
         
            
            
            
             首先定义什么是消息的一致性:产生消息的业务动作与发送的一致,就是说,如果操作成功了,那么这个操作产生的消息一定要发送出去,否则就丢失消息了。另一方面,如果业务行为没有发生或者失败则不能把消息发送出去。经常的思路是:先写业务,然后写消息,这样不能保证业务完成,消息一定写成功了;或者先写消息,后写业务,这也不能保证消息写成功后,业务一定会执行成功。现在有种思路如下:,但是上面第五到第六步还            
                
         
            
            
            
            1、三种常用的缓存模式1.旁路缓存模式一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。采用缓存 + 数据库读写的方式,就是 Cache Aside Pattern(旁路缓存模式)。读的时候,先读缓存,缓存没有的话,就读数据库,然后取出数据后放入缓存            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-23 08:58:09
                            
                                78阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            分布式事务基础理论基于上述的CAP和BASE理论,一般情况下会保证P和A,舍弃C,保证最终一致性。最终一致是指经过一段时间后,所有节点数据都将会达到一致。如订单的"支付中"状态,最终会变为“支付 成功”或者"支付失败",使订单状态与实际交易结果达成一致,但需要一定时间的延迟、等待。概述案例此方案的核心是将分布式事务拆分成多个本地事务,然后通过网络由消息队列协调完成所有事务,并实现最终一致性。以转账            
                
         
            
            
            
            1、RabbitMQ 介绍1.1 、简介消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。而RabbitMQ是消息队列的一种,他遵循AMQP1.2、什么是AMQP协议Advanced Message Queuing Protocol (高级消息队列协议) AMQP是一个标准开放的应用层的消息中间件(Mess            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-03 15:21:53
                            
                                93阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            作者:孤独烟引言这篇说说分布式事务的问题。企业现在的架构都由传统的架构转向了微服务架构,如下图所示:  那么,都不可避免的会遇到跨数据库调用的,分布式事务问题!  目前,业内解决分布式事务问题,都基本不用JTA这种强一致性的解决方案,基本是采用如下两套方案  基于TCC的事务框架消息队列OK,你们先记住两点(1)图中的服务A和服务B,如果是同步调用,要求一起成功,或者一起失败,那么此时应选用TCC            
                
         
            
            
            
            消息队列常面临各种可靠性问题,例如服务宕机、幂等性、消息丢失。服务宕机避免服务宕机的最有效解决方案就是部署MQ服务集群,不同的消息服务端有不同集群方案,这个问题笔者抽时间另外起一个专题进行讲解。幂等性幂等性的定义表示任意多次请求执行的结果均与一次请求执行的结果相同,对于一个接口而言,即无论调用多少次,最终得到的结果都是一样的。消息队列中的幂等性隐患情况消息生产者发送message到MQ服务端的时候            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-31 10:07:49
                            
                                45阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            目录概念消息队列消息队列初始化消息队列-发送消息消息队列-读取消息总结概念消息队列本质上是存放消息的链接表 ,存放在内核中,内核通过维护这个链表来维护消息队列。 消息队列的初始化就相当于创建一个空闲的链表, 能够存放一定数量的消息;向消息队列发送消息,就是向这个链表中插入一个新节点;从消息队列中都数据,实际就是从链表中删除一个节点。消息队列消息队列结构体如下:struct rt_mess            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-10-24 10:31:24
                            
                                60阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            基本可用软状态最终一致事务本用例分两个数据库分别是用户库和交易库,不使用分布式事务,使用基于消息驱动实现基本可用软状态最终一致事务(BASE)。现在说明下事务逻辑演化步骤,尊从CAP原则,即分布式系统不能全部确保一致性、可用性、分区容错性,只能三选二。文章里从一致性模式讨论,例子里每次出售物品时,将一行添加到交易表中,并更新买方和卖方的数量。 使用ACID风格的事务这是强一致性事务,SQL将如图所            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-08-07 09:23:07
                            
                                80阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            文章目录前言一、如何实现1、接口定义(1)、推送消息(2)、等待消息(3)、轮询消息2、用到的对象(1)、队列(2)、互斥变量(3)、条件变量3、基本流程(1)、线程通信二、完整代码三、使用示例1、线程通信(1)、等待消息(2)、轮询消息总结 前言消息队列在多线程的场景有时会用到,尤其是线程通信跨线程调用的时候,就可以使用消息队列进行通信。C++实现一个能用的消息队列还是比较简单的,只需要一个队            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-04-19 14:21:43
                            
                                105阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            其实这个也是用 MQ 的时候必问的话题,第一看看你了不了解顺序这个事儿?第二看看你有没有办法保证消息是有顺序的?这是生产系统中常见的问题。我举个例子,我们以前做过一个 mysql binlog 同步的系统,压力还是非常大的,日同步数据要达到上亿,就是说数据从一个 mysql 库原封不动地同步到另一个 mysql 库里面去(mysql -> mysql)。常见的一点在于说比            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-09-06 13:23:36
                            
                                35阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            消息丢失的案例: Leader接收消息后,更新Leader的LEO,但是Remote-LEO和HW并没有更新。 如果生产者设置acks=1,则表示此消息已经发送成功。如果acks=-1,默认 min.insync.replics=1,也表示消息已经发送成功: Follower拉取消息,放到本地,此时 ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-08-27 18:18:00
                            
                                246阅读
                            
                                                                                    
                                2评论