`

mq消息队列的应用与思考点

    博客分类:
  • MQ
 
阅读更多
rabbitMq:
1.如何保证顺序接收的消息
采用单机一个一个消费
多机场景,需要状态验证,验证失败返回mq接收失败,让其后续重发。
2.如何保证消费者挂掉重启后,不去再重复做消费的业务处理,比如重复下单
1.业务处理记录mq传来的唯一标识id,每次先校验此id是否处理成功
2.业务处理可以是redis.set,set处理只会覆盖key
3.采用第三方中介件,比如redis每次保存记录消息中标识id,进入时校验id

2.2 分布式系统中的事务问题,如果A调用B,如何保证B不被重复消费,因为B可能超时,A会不断重试,
扣库存扣一个库存,客户端可能多次重试。扣库存B超时了,A重试一次,实际下游B已经扣减成功,我们采用上游防止A重试。
A生成订单号,利用DB唯一索引,做抢占锁用,抢占到了去调用B扣减库存。

3.如何保证消费的可靠性传输
以下三个不丢数据场景解析
3.1 生产者丢数据
从生产者弄丢数据这个角度来看,RabbitMQ提供transaction和confirm(事务确定)模式来确保生产者不丢消息。
3.2 消息队列丢数据
处理消息队列丢数据的情况,一般是开启持久化磁盘的配置。万一在持久化时丢了,事务返回ack失败,让生产者重新发送。
3.3 消费者丢数据
采用手动确认消息设置,即消费者处理成功后返回给mq确定删除。

4.为什么引入消息队列后,系统的可用性下降。
系统可用性降低:万一mq挂了;
系统复杂性增加:要花时间考虑事务一致性问题、如何保证消息不被重复消费(传唯一标识),如何保证保证消息可靠传输(三个场景不丢数据)

5.引入消息队列后优点。
5.1 解耦
房屋下架业务,房屋签约自动下架,房源管理手动下架,还有超时定时下架,系统间耦合性太强。
采用生产者消费者业务解耦,比如房屋签约业务,需要自动把房源下架,可以吧下架业务独立A,这样签约业务可以使用A,手动,定时下架或其他业务也可以使用A。
A成为独立服务,自己维护自己代码。
5.2 异步
主业务只做自己的事情,非必要的业务逻辑以异步的方式运行,加快响应速度。
5.3 削峰限流
系统A慢慢的按照数据库能处理的并发量,从消息队列中慢慢拉取消息。在生产中,这个短暂的高峰期积压是允许的。
5.4 分流
消息队列可以被多台服务分流消费处理。

你是否:
- 发送RabbitMQ消息时经常生产速率下降导致服务响应时间变慢?
- 经常发现消息积压使得性能变慢却又感觉无法快速恢复?
- 压测过程中老感觉性能瓶颈在MQ?

为你带来新鲜出炉的:
- RabbitMQ 流控规则分析 - http://confluence.corp.imdada.cn/pages/viewpage.action?pageId=12535835
- RabbitMQ 流控性能分析 & 最佳实践 - http://confluence.corp.imdada.cn/pages/viewpage.action?pageId=12540536

kafka
参考:
https://www.cnblogs.com/williamjie/p/9481780.html
分享到:
评论

相关推荐

    05_知其然而知其所以然:如何进行消息队列的技术选型?.zip

    文件“笔记.docx”可能包含了作者对MQ技术选型的详细笔记,包括对比各种MQ的优缺点、实际应用案例以及选型的思考过程。而“PPT.pptx”可能是一个演示文稿,通过图表和实例进一步阐述了MQ技术的关键点和选型策略。 ...

    ZeroMQ-一个基于内存的消息队列

    ZeroMQ,又称为0MQ或ØMQ,是一个高度可扩展的、高性能的开源消息队列系统,它在设计上借鉴了传统的消息中间件概念,但更注重轻量级和灵活性。这个库允许开发者构建分布式应用,通过在进程间传递消息来实现异步通信...

    为何要使用MQ.docx

    消息队列(Message Queue, MQ)作为一种广泛应用于分布式系统中的技术手段,能够有效解决上述问题。下面我们将重点介绍MQ是如何保证消息的可靠投递的。 1. **Client如何将消息可靠投递到MQ** - Client发送消息给...

    分布式消息通讯之Kafka的基本应用1

    随着TIB带来的甜头被广泛应用在各大领域,IBM也开始研究开发自己的消息中间件,3年后IBM的消息队列IBM MQ产品系列发布,之后的一段时间MQ系列进化成了WebSphere MQ统治商业消息队列平台市场。包括后期微软也研发了...

    Java 工程师进阶知识完全扫盲

    不同的消息队列产品有其特点和适用场景,例如 Kafka 适合高吞吐量和大规模数据处理,ActiveMQ 适合企业级应用,RabbitMQ 适合小型应用等。 四、消息队列的高可用性和可靠性 面试官:那你们是如何保证消息队列的高...

    Java工程师面试突击第1季笔记

    Java工程师在面试中,尤其是针对高级或资深角色,经常会被问到关于消息队列(MQ)的相关知识。面试官在“Java工程师面试突击第1季笔记”中通过一系列问题,试图评估候选人在实际项目中使用MQ的经验、理解深度以及对...

    Java 工程师进阶知识完全扫盲.pdf

    Java工程师在进阶过程中,掌握消息队列(Message Queue,简称MQ)是非常关键的一项技能。在面试场景中,面试官可能会深入地询问关于MQ的使用、优缺点、不同MQ中间件的区别以及高可用、可靠性和顺序性等核心问题。...

    史上最全 Java面试集锦 知识扫盲 面试题分析

    Java面试中的消息队列(MQ)是面试官常考察的关键技术之一,因为它在现代软件架构中扮演着重要的角色。在上述面试场景中,面试官通过一系列问题深入考察了候选人的技术理解、应用经验和思考能力。 1. **为什么使用...

    阿里巴巴中台技术架构实践与思考5 .pdf

    随着技术的演进,阿里巴巴进一步推进技术平台化,构建了如EDAS(企业级分布式应用服务)、MQ(消息队列)、CSB(服务总线)、DRDS(分布式关系数据库服务)等一系列企业级互联网架构平台。这些平台不仅提高了服务的...

    ZeroMQ Guide翻译 中文版 pdf

    0MQ的定位是提供轻量级的消息队列,能够被广泛用于构建多线程或分布式应用程序。开发者可以通过它提供的接口来发送和接收消息,实现不同程序或组件之间的通信。 ### 零MQ的设计理念 #### 类固醇上的套接字 0MQ被...

    阿里巴巴中台技术架构实践与思考 .pdf

    阿里巴巴采用了分布式基础框架,如HSF(High Speed Service Framework)、MQ(消息队列)、TDDL( Transparent Data Access Layer)等,提供服务高可用、稳定性治理、全链路监控和处理等功能,确保系统的稳定运行。...

    Code Connected Volume

    在描述中提到,ZeroMQ是目前最快的MQ(消息队列)之一,性能要比ActiveMQ快20倍以上。这里的ActiveMQ是一个流行的开源消息代理,支持多种跨语言的消息协议。这个比较说明了ZeroMQ在性能方面的优势。 从提供的部分...

    张琨:教育社交平台的web架构分享

    MQserver使用了RabbitMQ作为基础的异步消息队列服务,而FileStoreServer结合了Varnish和MongoDB来实现静态资源的存储。 具体服务与应用的设计方面,FeedSystem负责平台首页新鲜事的推送或拉取,需要解决缓存设计、...

    Fourinone分布式计算框架

    FourInOne也可以当成简单的mq来使用,将domain视为mq队列,每个node为一个队列消息,监控domain的变化事件来获取队列消息。也可以将domain视为订阅主题,将每个订阅者注册到domain的node上,发布者将消息逐一更新每...

    ZeroMQ中文指导手册.pdf

    ZeroMQ,又称0MQ、0_MQ或ØMQ,是一个高性能的异步通信库,提供了消息队列的功能。它是一个设计用来在分布式或并发应用程序中简化套接字通信的框架。ZeroMQ支持多种语言和多种传输方式,可用于构建客户端-服务器模型...

    藏经阁-【云栖精选7月刊】抛开晦涩的算法、模型,让我们来谈谈互联网架构.pdf

    1. **消息队列(MQ)与MQTT**:MQ提供异步通信能力,MQTT则是一种轻量级的物联网协议,适用于低带宽、高延迟的环境,如共享单车等移动设备的连接。 2. **PCDN共享网络黑科技**:阿里云发布的PCDN技术降低了视频行业...

    Fourinone分布式并行计算四合一框架

     Fourinone也可以当成简单的mq来使用,将domain视为mq队列,每个node为一个队列消息,监控domain的变化事件来获取队列消息。也可以将domain视为订阅主题,将每个订阅者注册到domain的node上,发布者将消息逐一更新...

    fourinone-3.04.25

    Fourinone也可以当成简单的mq来使用,将domain视为mq队列,每个node为一个队列消息,监控domain的变化事件来获取队列消息。也可以将domain视为订阅主题,将每个订阅者注册到domain的node上,发布者将消息逐一更新每...

    Java面试考核目标.docx

    - **考核点**:熟悉消息队列、分布式缓存等常用中间件的工作原理及应用场景。 - **考核基准**: - 初级:了解RabbitMQ、Kafka等消息队列的基本用法。 - 中级:能够配置中间件集群环境,实现负载均衡。 - 高级:...

Global site tag (gtag.js) - Google Analytics