目录
- 1、消息中间件应用场景
- 场景一:异步解耦
- 同步调用
- 异步调用
- 场景二:流量削峰
- 2、常用消息中间件
- ActiveMQ
- Kafka
- RabbitMQ
- RocketMQ
- 3、RocketMQ的核心概念
- 生产者Producer
- 消费者Consumer
- 名字服务Name Server
- 代理服务器Broker Server
- 消息主题Topic
- 消息队列MessageQueue
- 消息内容Message
- 标签Tag
RocketMQ安装包和控制台
1、消息中间件应用场景
场景一:异步解耦
作用:
比如某个订单服务,涉及到了很多其他服务,比如支付服务、库存服务、物流服务,如果这些服务有一个出现了问题,就会导致整个服务走不下去。
这个时候就可以用RocketMQ来实现解耦,这个服务出现了问题,但是不会影响到其他服务的执行,比如客户下单的话,会用到这个物流服务,这个服务出现问题了,但不要让其影响到支付服务等其他服务,让业务能继续走下去。
====================================
同步调用
这个时候是没有用到消息中间件的。
此时的订单服务和支付服务等服务是耦合的。
这个要调完全部服务并执行完业务逻辑后才能响应回给客户说下单成功
异步调用
这个时候引入消息中间件
起到一个桥梁的作用
把订单的消息封装成一个对象,或者是一个字符串,然后把这个内容传到消息中间件里面来。这个消息中间件是不执行业务的。只是存消息和分发消息而已
然后再把消息分发到各个涉及到的服务里面去,然后各服务再进行对应的业务处理
订单服务把消息放到消息中间件的这个过程是很快的,因为这个过程并没有开始执行任何业务逻辑。
消息中间件收到消息后,会再通知具体的服务进行业务的处理
场景二:流量削峰
分析图
场景三:数据分发
2、常用消息中间件
ActiveMQ
ActiveMQ是Apache出品,比较老的一个开源的消息中间件,以前在中小企业应用广泛.
Kafka
设计理念:处理海量的日志,怎么快怎么来。
把日志存到Kafka里面,通过其他工具对里面的日志进行分析,在极限处理的情况下会丢数据。
因为是处理日志,所以追求快速,即使丢掉一两条数据也无伤大雅
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。
RabbitMQ
在速度方法比RocketMQ和Kafka慢一些,但是稳定性就比它们好。
RabbitMQ 是一个基于Erlang 语言开发的消息中间件,
RabbitMQ 最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
对数据的一致性,稳定性和可靠性要求比较高的场景
RocketMQ
RocketMQ 是阿里巴巴在 2012 年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于 2017 年 9 月 25 日成为 Apache 的顶级项目。作为经历过多次阿里巴巴双十一这种“超级工程”的洗礼并有稳定出色表现的国产中间件,以其高性能、低延时和高可靠等特性近年来已经也被越来越多的国内企业使用。
淘宝内部的交易系统使用了淘宝自主研发的 Notify 消息中间件,使用 MySQL 作为消息存储媒介,可完全水平扩容,为了进一步降低成本,我们认为存储部分可以进一步优化,2011 年初,Linkin开源了 Kafka 这个优秀的消息中间件,淘宝中间件团队在对 Kafka 做过充分 Review 之后, Kafka 无限消息堆积,高效的持久化速度吸引了我们,但是同时发现这个消息系统主要定位于日志传输,对于使用在淘宝交易、订单、充值等场景下还有诸多特性不满足,为此我们重新用 Java 语言编写了 RocketMQ ,定位于非日志的可靠消息传输(日志场景也OK),目前 RocketMQ 在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理, binlog 分发等场景。
3、RocketMQ的核心概念
生产者Producer
负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
消费者Consumer
负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。
名字服务Name Server
名称服务充当路由消息的提供者。生产者或消费者能够通过名字服务查找各主题相应的Broker IP列表。多个Namesrv实例组成集群,但相互独立,没有信息交换。
代理服务器Broker Server
消息中转角色,负责存储消息、转发消息。代理服务器在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。代理服务器也存储消息相关的元数据,包括消费者组、消费进度偏移和主题和队列消息等。
消息主题Topic
表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
消息队列MessageQueue
对于每个Topic都可以设置一定数量的消息队列用来进行数据的读取
消息内容Message
消息系统所传输信息的物理载体,生产和消费数据的最小单位,每条消息必须属于一个主题。RocketMQ中每个消息拥有唯一的Message ID,且可以携带具有业务标识的Key。系统提供了通过Message ID和Key查询消息的功能。
标签Tag
为消息设置的标志,用于同一主题下区分不同类型的消息。来自同一业务单元的消息,可以根据不同业务目的在同一主题下设置不同标签。标签能够有效地保持代码的清晰度和连贯性,并优化RocketMQ提供的查询系统。消费者可以根据Tag实现对不同子主题的不同消费逻辑,实现更好的扩展性。