RabbitMQ基本概念
1. 什么是RabbitMQ?
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。
2.RabbitMQ的使用场景
消息中间件最主要的作用是解耦,中间件最标准的用法其实是生产者生产消息发送到队列,消费者从队列中拿取消息并处理,生产者不用关心是谁来消费,消费者不用关心谁来生产信息,达到解耦的目的。
除此之外,还用做异步调用(如:发送注册邮件的同时,发送注册短信)等。
3.消息传播机制
机制:
- 生产者指定Message的routing key,并指定Message发送到哪个Exchange
- Queue会通过binding key绑定到指定的Exchange
- Exchange根据对比Message的routing key和Queue的binding key,然后按一定的分发路由规则,决定Message发送到哪个Queue
图中所示概念:
-
broker :也叫RabbitMQ 服务器,接受客户端的连接,实现AMQP实体服务。 他的角色就是维护一条 从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。
-
Producer: 消息生产者,数据的发送方。消息生产者连接RabbitMQ服务器然后将消息投递到Exchange。
-
Connection(连接):Producer 和 Consumer 通过TCP 连接到 RabbitMQ Server。
-
Channel(信道):基于 Connection 创建,数据流动都是在 Channel 中进行。
-
Consumer:消息消费者。消息消费者订阅队列, RabbitMQ将Queue中的消息发送到消息消费者。
-
Message(消息):消息由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(消息优先权)、delivery-mode(是否持久性存储)等。
-
Routing Key(路由键):消息发送给 Exchange(交换器)时,消息将拥有一个路由键(默认为空), Exchange(交换器)根据这个路由键将消息发送到匹配的队列中。
-
Exchange(交换器):生产者将消息发送到Exchange(交换器),由Exchange将消息路由到一个或多个Queue中或者丢弃(如果没有 Queue绑定到 Exchange 的话)。Exchange用于转发消息,它不会存储消息 。RabbitMQ中的Exchange有 direct、fanout、topic、headers四种类型,每种类型对应不同的路由规则。
-
Binding Key(绑定键):指定当前 Exchange(交换器)下,什么样的 Routing Key(路由键)会被下派到当前绑定的 Queue 中。
-
Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者。
4.RabbitMQ 最常用的三大模式?
4.1 Direct 模式
完全匹配,消息路由到那些 Routing Key 与 Binding Key 完全匹配的 Queue 中。比如 Routing Key 为cleint-key,只会转发cleint-key,不会转发cleint-key.1,也不会转发cleint-key.1.2.
4.2 Topic 模式
模糊匹配,Exchange 会把消息发送到一个或者多个满足通配符规则的 routing-key 的 Queue。
匹配规则:
第一种: * 匹配单个字母或数字
第二种: # 匹配0~多个字母或数字
比如:满足a.*.c的 routing-key 有a.hello.c;满足#.hello的 routing-key 有a.b.c.helo。
4.3 Fanout 模式(广播)
忽略匹配,把所有发送到该 Exchange 的消息路由到所有与它绑定 的Queue 中。
https://upload-images.jianshu.io/upload_images/5354677-9619167fa584fccb