美文网首页
消息队列学习笔记

消息队列学习笔记

作者: Andytl的世界 | 来源:发表于2020-01-20 07:04 被阅读0次

《消息队列必知必会》是极客时间上一门课程,总共5讲,以下为学习笔记。

第一讲,为什么需要消息队列

消息队列是古老的中间件,从系统之间有通信需求开始,就自然产生了消息队列。消息队列像传送带一样把上下游的工序连接起来。可应用于需要异步处理、流量控制、服务解耦的场景中。消息队列也有它自身的一些问题和局限性,包括:引入消息队列带来的延迟问题;增加了系统的复杂度;可能产生数据不一致的问题。

第二讲,如何选择消息队列

这讲是关于消息队列的技术选型,软件工程里没有银弹,也就是说没有一个选型是包治百病的。常用的消息队列各有优劣,要根据情况选择适合的。

1.评判的标准:

基本分:消息传递可靠,支持集群,性能足够

加分:开源,活跃度高,生态兼容性好

2.常用消息队列产品

RabbitMQ,老牌消息队列,小众语言开发,轻量级,支持语言多,对消息堆积支持不好,性能不佳。如果说,消息队列并不是你将要构建系统的主角之一,你对消息队列功能和性能都没有很高的要求,只需要一个开箱即用易于维护的产品,我建议你使用 RabbitMQ。

RocketMQ,阿里开源的消息队列,Java开发,经历了双十一考验,性能优良,中文社区活跃,但国际化水平不高,生态兼容性不佳。如果你的系统使用消息队列主要场景是处理在线业务,比如在交易系统中用消息队列传递订单,那 RocketMQ 的低延迟和金融级的稳定性是你需要的。

Kafka,LinkedIn开发,Apache顶级项目,生态兼容性最好,尤其在大数据、流计算领域首选,异步收发性能卓越,但同步收发性能不佳,不适合在线业务。如果你需要处理海量的消息,像收集日志、监控信息或是前端的埋点这类数据,或是你的应用场景大量使用了大数据、流计算相关的开源产品,那 Kafka 是最适合你的消息队列。

第三讲,如何确保消息不丢失

主流的消息队列产品都提供了完善的可靠性保障。消息丢失绝大多数情况是没有正确使用和配置。

监测消息是否丢失,最简单的方式是给每个消息一个序号,如果监测到序号不连续,就说明丢失了。

如何保障消息不丢失的呢?

1.生产阶段

编写发送消息代码时,需要注意,正确处理返回值或者捕获异常,就可以保证这个阶段的消息不会丢失。

2.存储阶段

在存储阶段正常情况下,只要 Broker 在正常运行,就不会出现丢失消息的问题。如果对消息的可靠性要求非常高,可以通过配置 Broker 参数来避免因为宕机丢消息。

3.消费阶段

不要在收到消息后就立即发送消费确认,而是应该在执行完所有消费业务逻辑之后,再发送消费确认。

第四讲,如何处理消息重复

消息可能出现重复,对于一些场合很敏感,比如交易中,同一笔交易发了两次,收到的款可能翻倍。

为了处理消息重复,可以利用操作的幂等性原理。也就是说操作多次和一次效果一样。比如,A给B转账100元,业务代码中不要写B加100元,而是把B账户金额设为100元。无论执行多少次操作,B账户都是100元。

利用幂等性解决重复消息问题,需要在业务代码中将操作变换为幂等操作。有些技巧:

1.利用数据库唯一约束

2.为更新数据加前置条件

3.记录并检查操作

第五讲,消息积压了怎么办

消息积压一般是某部分性能出了问题,消费不过来数据。

优化性能避免积压中,一般不考虑消息队列的优化,因为相比于业务逻辑,消息队列处理能力远大于业务处理。一般考虑在消息的收发两端,业务代码怎么和消息队列配合,达到一个最佳的性能。

发送端的发信速率优化的办法有选择合适并发和批量。

消费端的消费速度直接影响消息队列积压,一定要保证消费端的消费性能要高于生产端的发送性能,这样的系统才能健康的持续运行。消费端的性能优化除了优化消费业务逻辑以外,也可以通过水平扩容,增加消费端的并发数来提升总体的消费性能。

相关文章

  • 消息队列学习笔记

    《消息队列必知必会》是极客时间上一门课程,总共5讲,以下为学习笔记。 第一讲,为什么需要消息队列 消息队列是古老的...

  • 消息队列--RocketMQ学习笔记

    序言 本文是RocketMQ学习及使用过程中整理的笔记,主要是个人觉得很关键或者是需要加深理解部分知识的纪录,主要...

  • kafka

    kafka笔记 一、kafak简介 1、消息队列 消息队列:用于存放消息的组件 程序员可以将消息放入到队列中,也可...

  • FreeRTOS学习笔记(3)——消息队列

    一、头文件 二、创建队列 2.1 相关API说明 2.1.1 xQueueCreate 使用动态内存的方式创建一个...

  • 【kafka学习笔记】了解消息队列

    kafka是什么 你可以将它作为消息队列使用,点对点或者发布订阅的模式都可以。 你也可以将它作为消息引擎使用,实现...

  • 消息队列概念与认知

    MQ学习系列: 消息队列概念与认知 ActiveMQ Topic消息重发 本文是-消息队列学习的概念与介绍篇。目的...

  • 必知必会——分布式消息队列

    分布式消息队列需要先掌握消息队列的基础,比如消息模式、消息协议等,其次找一个常用的分布式消息队列作为学习的对象, ...

  • RabbitMQ实战:运行和管理RabbitMQ

    本系列是「RabbitMQ实战:高效部署分布式消息队列」书籍的总结笔记。 上一篇 介绍了AMQP消息通信,包括队列...

  • 关于消息队列(笔记)

    分享一个高手的解释,化抽象为具体,化繁为简,牛逼牛逼[消息队列的使用场景是怎样的? - 祁达方的回答 - 知乎](...

  • 架构学习-消息队列

    在公司中,目前服务拆分出来的订单模块,商品模块,发票申请模块,邮寄模块,退款模块,安全模块,公共模块,之前拆分出...

网友评论

      本文标题:消息队列学习笔记

      本文链接:https://www.haomeiwen.com/subject/ttadzctx.html