RockMq学习笔记

RocketMq学习笔记

消息队列

为什么要使用消息队列

消息队列(Message Queue)。众所周知,队列是一种“先进先出”的数据结构。

通常来讲,分布式消息队列的结构是:

在这里插入图片描述

即一个应用想向其他应用发送消息。它不直接向其发送消息,而是先发送到一个消息中间件,而消息接收方从消息中间件中获得消息。

MQ的好处和典型的场景:

  • 消息通讯

MQ提供了统一的消息通讯方式,应用无须再专门的写自己的发送消息、接收消息方法和协议,只需简单的向MQ发送消息、接收消息即可。

在这里插入图片描述

比如上图中有4个应用,如果不使用MQ,两两通信,会需要6条通信渠道。而使用MQ,仅需要4条。随着应用数的增多,MQ用于消息通信的优势会越来越明显。

  • 应用解耦

在没有消息队列时,应用之间通信通常会使用RPC的方式,如thift协议定义的RPC。而RPC调用,系统之间的耦合性较高。

因此,MQ的第一个应用场景就是实现应用之间的解耦。不使用MQ,各个应用之间是同步调用方式,若一个模块出现问题,就会导致整个业务出现状况。

考虑典型的电商核心交易场景:

在这里插入图片描述

通过引入MQ,实现了电商各个应用模块之间的异步解耦,由同步调用改成了异步调用,降低了各个模块之间的依赖性。

  • 流量削峰

考虑这样一个场景:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8ospG4FO-1624428784223)(image-20210622211855706.png)]

应用系统如果遇到流量暴增的时候,有可能将整个数据库压垮。而直接搭建一个高性能的集群是有资源浪费的,因为只有在某个时间段才有那么大的流量。因此需要用到“流量削峰”。即MQ可以将大量请求缓存起来。这种业务场景下,MQ类似于一个“缓存”,起到缓解发送方、接收方速度不匹配的情况。

  • 分布式事务场景

某些MQ是支持事务型消息的,如RocketMq。考虑这样一个场景:
在这里插入图片描述

MQ提供了在分布式环境下实现事务的一个解决方案。会有专门的线程去扫描消息队列,只有当这个消息成功被“余额宝”消费时,图中的“支付宝”事务才算成功。

  • 大数据分析场景

MQ作为整个大数据生态环境中的一环,起到日志采集、消息缓存等的作用:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXx5tr5m-1624428784225)(image-20210622213444934.png)]

如RocketMq收集到日志数据,传递给下游的Flink、Spark等。

  • 物联网场景

IoT设备往往性能较差,如果直接将其发送到远端的服务器集群,会经常存在消息丢失、消息无法发送等问题,因此,需要使用MQ做一个中间件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hM7ONLK-1624428784225)(image-20210622213636846.png)]

MQ的优缺点

MQ的优点在于解耦、削峰、数据分发。

需要解决的问题在于:

  • 系统的可靠性需要依赖于MQ本身的可靠性,如果MQ挂了,则系统会受到很大影响。
  • MQ需要保证消息的各种性质,如避免重复消费、消息丢失问题、消息传递的顺序性。
  • 消息的一致性问题。

MQ对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oByA96Hu-1624428784226)(image-20210623133520838.png)]

RocketMq简介

什么是RocketMq

RocketMq是一款分布式的消息中间件,是金融级消息及数据流平台,支持万亿级消息洪峰,是阿里巴巴开源项目,目前已成为Apache顶级项目。项目主页:http://rocketmq.apache.org/

RocktMq基本模型

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TRCZmF2f-1624428784227)(image-20210622213953942.png)]

Producer来发送消息,Topic是消息的“逻辑地址”,Consumer是来消费消息的。

实际生产环境中要比这复杂的多,如Topic需要进行分区,整个MQ要实现高可用、负载均衡等。因此也就有了下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xR3h3po7-1624428784227)(image-20210622214256020.png)]

上图是一个概念模型。有两个Topic和Consumer Group。Broker就是用来存储实际的消息的。

Topic其实一个逻辑上的概念,为了进行Topic的水平扩展,实际上对应于多个MessageQueue(类似于kafka中Partition分区的概念)。一个broker可以负责多个MessageQueue。

在RocketMq中,有多种消费模式。一种是集群模式,即一条消息只被Consumer Group中一个消费者进行负载均衡的消费。另一种是广播的模式,即每个消费者都会消费到那条消息。

RocketMQ消息类型

RocketMQ的消息类型可分为普通消息、顺序消息(局部有序和全局有序)、事务消息、延时(定时)消息。

**定时消息:**给出消费的“延时”时间:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值