RocketMQ

这段时间做分布式事务的时候用到了RocketMQ,今天在这里总结一下最近的学习成果。

什么是MQ?

MQ就是消息队列,全称Message Queue。顾名思义,就是存放消息的队列。

为什么要用MQ?

1、异步

没错,就是我们常说的那个异步。举个栗子,现有AB两个服务,客户端调用A服务的一个接口,接口中又调用了B服务的接口,但是B服务这个接口可能实时性要求不是很高,那为了加快接口的响应速度,我们可以将A调用B这部分用MQ来代替,此时,请求逻辑就变成了客户端调用A的接口,A接口发送消息到MQ Server并响应客户端,这样用户体验就会提升。

2、解耦

当我们把消息写到MQ中,需要调用时去MQ拿,不需要时不拿,这样就可以不用一直改代码,降低了代码的耦合性。

3、削峰

这个名词看着很别扭啊,什么是削峰?其实就是使用MQ处理并发量高的场景可能出现的问题,同样举个栗子,电商大促,一个接口的并发量达到了2000,但是服务本身只能处理500的并发,这时使用MQ,将消息放到MQ Server中,让服务根据自己的性能去MQ拉取消息,执行业务处理,从而达到削峰作用。

RocketMQ简介

RocketMQ是阿里巴巴的消息队列,经过双十一双十二的洗礼,它现在已经开源给了阿帕奇,相比于其他的MQ,它的主要特点是:

1、原生支持分布式

2、支持发布订阅模型也支持点对点的消息模型

3、支持Push和Pull两种消息拉取模式

4、拥有现成的配置监控dashboard

5、支持消息重复消费、可满足严格的消息顺序消费,支持事务消息和回溯消费

6、消息堆积能力达到单机亿级且仍然可低延迟写入

7、拥有消息失败重试机制

RocketMQ中的基本概念

NameServer

路由中心,它为Producer和Consumer提供路由信息,拥有路由管理、服务注册、服务发现的功能。

Broker

消息中转的角色,它负责存储消息,转发消息。

Topic

消息主题,消息的逻辑分类,阿里的rocketMQ按topic来收费

Tag

消息标签,也是消息的分类,只不过它的概念比topic小,可以划分topic下的消息。

Message

消息的载体,一个 Message 必须指定 topic,还可选tag 设置,以便消费端可以基于 tag 进行过滤消息。

Producer Group

生产者组,由可以发送同一类消息的生产者组成,方便在集群中动态扩展生产者,从部署上看同组名的生产者构成集群。

Consumer Group

消费者组,由可以消费同一类消息的消费者组成,方便在集群中动态扩展消费者,从部署上看同组名的生产者构成集群。

Producer

生产者,生产消息到MQ Server。

Consumer

消费者,消费MQ中的消息。

RocketMQ四大核心组件

下面是RocketMQ的部署结构图

Producer生产者,负责生产消息,提供了三种消息发送方式:同步、异步、单向。

同步发送:发送完一条消息后等待接收方的响应。

异步发送:发送完消息后不等待接收方响应继续发送下一条。

单向发送:只负责发送消息而不等待服务器回应且没有回调函数触发。

Consumer消费者,负责从broker中拉取消息进行消费,前面提到rocketMq支持Push和Pull两种消息拉取模式。

Push模式:封装了消息的拉取、消费进度和其他的内部维护工作,将消息到达时执行的回调接口留给用户应用程序来实现。所以 Push 称为被动消费类型,但从实现上看还是从消息服务器中拉取消息,不同于 Pull 的是 Push 首先要注册消费监听器,当监听器处触发后才开始消费消息。

链接:https://www.jianshu.com/p/e5cfb4ba925e

Pull模式:pull模式下消费者主动从broker中拉取消息进行消费。

 

Broker消息服务器,除了前面介绍的它还存储与消息相关的元数据,包括用户组、消费进度偏移量、队列信息等。Broker分为master和slave,master可读可写,slave只能读,master的brokerId为0,非0的则是slave。Broker的部署方式有四种,单master、多master、多master多slave(异步复制)、多master多slave(同步双写),具体的部署方式的区别等我下次部署后再写。

 

NameServer路由中心,用来保存Broker的元信息,并给生产者和消费者提供Broker信息。简单来说就是Broker启动会注册自己的信息到NameServer,Producer生产消息和Consumer消费消息时都会通过Topic先到NameServer中查找建立长连接的Broker,它们都是每隔30s在NameServer中获取自己Topic的最新队列情况。

总结

本文中关于RocketMQ的三种消息类型没有展开描述,网上有很多写的不错的可以参考看看,下篇文章准备写分布式事务解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值