RabbitMQ——核心概念

 什么场景下选择mq,举个例子:

在电商系统中,商城和物流就是两个完全独立的系统,用在在购买完商品之后,商城会生成订单,之后的流程就是将订单交给物流系统,由物流系统安排发货,在用户完成订单之后,就不会立即需要之后的任何消息,这种时候就可以使用mq。

对于及时性比较高的功能不建议使用mq,比如用户下单、付款,都是需要立即给用户做出响应的,如果稍有延时,就会大大降低用户的体验度。


前言
本文主要记录一下rabbitmq的一些基础概念,便于日后的学习交流使用.

一、RabbitMQ是什么?


       RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端。(百度百科)
其中,AMQP是一个具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开发标准。为面向消息的中间件设计,AMQP的协议模型如下:

RabbitMQ——核心概念_第1张图片


二、RabbitMQ的应用场景
1. 服务解耦


      多系统、异构系统间的数据交换(消息通知/通讯)问题,也可以把它用于系统间服务的相互调用(RPC)

2. 削峰


      一般在秒杀或团抢活动中使用广泛,可以缓解短时间内高流量压垮应用

3.异步化缓冲


将不是必须的业务逻辑,异步处理,如:
用户在注册成功时,给用户发送注册邮件和短信通知的业务逻辑可以使用rabbitmq异步处理,提升系统的响应速度

三、RabbitMQ的核心概念


1.Server


又称Broker,接受客户端的连接,实现AMQP实体服务

2.Connection


是RabbitMQ的socket链接(也就是应用程序与Broker之间的网络连接),它封装了socket协议相关部分逻辑

3.Channel


网络信道,几乎所有的操作都在Channel中进行,包括定义Queue、定义Exchange、绑定Queue与Exchange、发布消息等。
客户端可建立多个Channel,每个Channel代表一个会话任务。

4.Message


消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容。

5.Virtual Host


虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有多个Exchange和Queue,同一个Virtual Host不能有相同名称的Exchange或Queue。

6.Exchange


交换机,接收消息,根据路由键(routing key)转发消息到对应的队列(Queue)

6.1 交换机的属性


1、Name:交换机名称
2、Type:交换机类型:fanout、direct、topic、headers
3、Durability:是否需要持久化,true为持久化
4、Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange
5、Internal:当前Exchange是否用于RabbitMQ内部使用,默认为false
6、Arguments:扩展参数,用于扩展AMQP协议自制定化使用

7.Binding


Exchange和Queue之间的虚拟连接,binding中可以包含routing key

8.Routing key


消息的路由规则,routing key需要与Exchange Type及binding key联合使用才能最终生效。
RabbitMQ为routing key设定的长度限制为255 bytes。

9.Queue


也称Message Queue,消息队列,保存消息并转发给消费者。多个消费者可以订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。

10.Binding key


在绑定(Binding)Exchange与Queue的同时,一般会指定一个binding key。binding key 依赖于Exchange Type,当routing key匹配到对应的Exchange Type下的binding key时,消息则会被路由到对应的Queue中。

11.Exchange Type


RabbitMQ常用的Exchange Type有fanout、direct、topic、headers这四种,head一般不用,在此不做介绍
a)fanout:所有发送到某个Exchange上的消息,都会被路由到绑定了这个Exchange的Queue中
b)direct:发送到某个Exchange上的消息,会被路由到binding key与routing key完全匹配的Queue中
c)topic:和direct类似,但是支持通配符‘*’与‘#’,其中‘*’支持匹配‘.’后面一个单词,比如:test.* 可以匹配test.a,test.b,test.ab;‘#’可以匹配‘.’后面多个单词(可以是零个),比如:test.#可以匹配test.a,test.b,test.a.b

四、RabbitMQ的整体架构

RabbitMQ——核心概念_第2张图片
五、RabbitMQ的消息流转

RabbitMQ——核心概念_第3张图片

生产者发送消息到broker的exchange,(即使没有指定具体的exchange,消息也会经过AMQP Default这个exchange)。

消费者在消费消息时是监听broker上的具体的队列的。

你可能感兴趣的:(RabbitMQ,rabbitmq)