1 & 简单介绍
RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。
RabbitMQ的官网:http://www.rabbitmq.com
2 & AMQP
AMQP,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,同样,消息使用者也不用知道发送者的存在。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
3 & 系统架构
上图所示:
- AMQP 里主要要说两个组件:Exchange 和 Queue;
- 绿色的 X 就是 Exchange ,红色的方块是 Queue ,这两者都在 Server 端,又称作 Broker ,这部分是 RabbitMQ 实现的;
- 而蓝色的则是客户端,通常有 Producer(生产者) 和 Consumer(消费者) 两种类型;
RabbitMQ 的工作流程:
- 【打开信道/频道】客户端连接到消息队列服务器,打开一个 Channel;
- 【声明交换机】客户端声明一个 Exchange ,并设置相关属性;
- 【声明消息队列】客户端声明一个 Queue,并设置相关属性;
- 【绑定交换机和队列】客户端使用 routing key,在 Exchange 和 Queue 之间建立好绑定关系;
- 【消息投递】客户端投递消息到 Exchange ,Exchange 接收到消息后,就根据消息的 Routing Key 和已经设置的 Binding,进行消息路由,将消息投递到一个或多个队列里;
注意:一个消费者只能消费一条消息(如果重复声明,类型参数不变不会报错。 如果第二次声明和第一次类型参数有变化,会报异常) ;
4 & 基本概念
- Producer:生产者,数据的发送方;
- Consumer:消费者,数据的接收方;
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列;
- Queue:消息队列载体,每个消息都会被投入到一个或多个队列;
- Binding:绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来;
- Routing Key:路由关键字,exchange根据这个关键字进行消息投递;
- vhost:虚拟主机(默认“/”),一个 broker 里可以开设多个 vhost,用作不同用户的权限分离;
- Channel:消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel 代表一个会话任务;