rabbitMq基础概念
一、相关概念,什么是MQ消息中间件
1、概念
消息中间件是分布式系统中的重要组件,其本质是一个具有接收消息、存储消息和分发消息的队列。应用程序通过读写队列消息来进行通信。FIFO 先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。

2、应用场景
RabbitMQ作为一款热门的消息队列中间件,具备高效可靠的消息异步传递机制,主要用于不同系统间的数据交流和传递,在企业解决方案、金融支付、电信、电子商务、社交、即时通信、视频、物联网、车联网等众多领域都有广泛应用。
异步通信
有些服务间调用是异步的,例如A调用B,B需要花费很长时间执行,但是A需要知道B什么时候可以执行完,以前一般有两种方式,A过一段时间去调用B的查询api查询。或者A提供一个callback的回调api,B执行完之后调用api通知A服务。这两种方式都不是很优雅,使用消息服务,可以很方便解决这个问题,A调用B服务后,只需要监听B处理完成的消息,当B处理完成后,会发送一条消息给MQ,MQ会将此消息转发给A服务。这样A服务既不用循环调用B的查询api,也不用提供callback api。同样B服务也不用做这些操作。A服务还能及时的得到异步处理成功的消息。

将业务中非核心的或不重要的流程部分,使用消息异步的方式发送给目标系统,这样主流业务流程不用同步等待掐他系统的处理结果,从而达到快速响应的目的。例如网站用户注册场景,在注册用户后需要发送注册邮件或者短信,这两个流程可以使用消息服务通知给邮件发送系统和短信发送系统,从而提升注册流程的响应速度。

错峰流控与流量削峰
在电子商务系统或大型网站中,上下游系统处理能力存在差异,处理能力高的上游系统的突发流量可能会对处理能力低的某些下游系统造成冲击,需要提高系统的可用性的同时降低系统实现的复杂性。电商大促销等流量洪流突然来袭时,可以通过队列服务堆积缓存订单等信息,在下游系统有能力处理消息的时候再处理,避免下游订阅系统因突发流量崩溃。消息队列提供亿级消息堆积能力,3天的默认保留时长,消息消费系统可以错峰进行消息处理。

另外,在商品秒杀、抢购等流量短时间内暴增场景中,为了防止后端应用被压垮,可在前后端系统间使用RabbitMQ消息队列传递请求。
系统解耦
以电商秒杀、抢购等流量短时间内暴增场景为例。传统的做法是订单下单后,订单系统发送请求查询库存系统查询库存,等待库存系统返回库存结果给订单系统,此时若库存系统发生了故障,订单系统就无法获取库存数据,导致下单失败。该场景订单系统和库存系统高度耦合。
系统高度耦合:

引入RabbitMQ消息队列,当用户下单后,将消息写入到RabbitMQ消息队列中,然后返回用户下单成功。库存系统订阅下单的消息,消费下单消息,然后进行库操作。即使库存系统出现故障,也不影响用户下单。
系统解耦:

二、消息组件分类


三、rabbitMQ核心概念
生产者(Producer)
即向队列发送消息的一方。发布消息的最终目的在于将消息内容传递给其他系统/模块,使对方按照约定处理该消息。
交换机
交换机是rabbitMQ非常重要的一个组件,它一方面接受生产者的消息,另一方面将消息推送到队列中。交换机必须明确知道如何处理它接到的消息,是将这些消息推送到特定的队列中还是推送到多个队列中,亦或是把消息丢弃,这个得由交换机的类型决定。
队列(Queue)
队列是用于存储消息的,是rabbitMQ中的一个数据结构,尽管消息流经rabbitMQ和应用程序,但是他们只能存储在队列中。队列仅受到主机内存和磁盘空间限制。其本质是一个大的消息缓冲区。生产者将消息送到队列,消费者从队列中获取和消费消息。多个消费者可以同时订阅同一个队列,队列里的消息分配给不同的消费者。
消费者(Consumer)
接收消息的一方。消费者订阅RabbitMQ的队列,当消费者消费一条消息时,只是消费消息的消息体。在消息路由的过程中,会丢弃标签,存入到队列中的只有消息体。

四、rabbitMq核心模式

五、名词解释

Broker:接收和分发消息的应用,rabbitMq Service就是Message Broker。
Connection:publisher/consumer和broker之间的TCP链接。
Channel:信道,如果每次访问RabbitMq都建立一个Connection,在消息量巨大的时候建立TCP Connection的开销是巨大的,效率也低。Channel在RabitMq内部建立逻辑连接。若应用程序支持多线程,通常每个thread创建单独的channel进行通讯,Channel作为轻量级的Connection,极大减少的操作系统建立connection的开销。
Exchage:message到达Broker的第一站,根据分发规则,匹配查询表中的routing key,分发到消息queue中,常用的类型有direct(point-to-point),topic(publish-subscriber)and fanout(multicast)。
Binding:Exchage与Queue之间的虚拟连线,binding中可以包含routing key,Binding信息被保存到exchage中的查询表中,用于message的分发依据。

浙公网安备 33010602011771号