Rabbitmq打怪升级之路(三)简介与架构流程
简书:亚武de小文 【原创:转载请注明出处】
Rabbitmq简介与架构流程
![](https://img.haomeiwen.com/i17767332/b27126f6fe3ef1fe.png)
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
应用场景
- 任务异步处理。
将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理。提高了应用程序的响应时间。
- 应用程序解耦合
MQ相当于一个中介,生产方通过MQ与消费方交互,它将应用程序进行解耦合。
- 流量削峰
一般在秒杀活动中使用较多
AMQP概念
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。
详见:RabbitMQ打怪升级之路(五)AMQP协议介绍
JMS概念
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
主要特性
1、可靠性 :
RabbitMQ 使用一些机制来保证可靠性 , 如持久化、传输确认及发布确认等。
2、灵活的路由 :
在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能,RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起, 也可以通过插件机制来实现自己的交换器。
3、扩展性 :
多个 RabbitMQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展集群中节点。
4、高可用性 :
队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队列仍然可用。
5、多种协议 :
RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP , MQTT 等多种消息中间件协议。
6、多语言客户端 :
Rabbitmq几乎支持所有常用语言,比如 Java、 Python 、 Ruby、 PHP 、C# 、 JavaScript 等。
7、管理界面 :
RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息、集群中的节点等。
8、插件机制:
RabbitMQ 提供了许多插件 , 以实现从多方面进行扩展,当然也可以编写自己的插件。
架构图及名词解释
![](https://img.haomeiwen.com/i17767332/26edee297fa6fd54.jpg)
- 生产者(Producer):发送消息的应用。
- 消费者(Consumer):接收消息的应用。
- 队列(Queue):存储消息的缓存。
- 消息(Message):由生产者通过RabbitMQ发送给消费者的信息。
- 连接(Connection):连接RabbitMQ和应用服务器的TCP连接。
- 通道(Channel):连接里的一个虚拟通道。当你通过消息队列发送或者接收消息时,这个操作都是通过通道进行的。
- 交换机(Exchange):交换机负责从生产者那里接收消息,并根据交换类型分发到对应的消息列队里。要实现消息的接收,一个队列必须到绑定一个交换机。
- 绑定(Binding):绑定是队列和交换机的一个关联连接。
- 路由键(Routing Key):路由键是供交换机查看并根据键来决定如何分发消息到列队的一个键。路由键可以说是消息的目的地址。
消息发布接收流程:
-
发送消息
1、生产者和Broker建立TCP连接。
2、生产者和Broker建立通道。
3、生产者通过通道消息发送给Broker,由Exchange将消息进行转发。
4、Exchange将消息转发到指定的Queue(队列)
-
接收消息
1、消费者和Broker建立TCP连接
2、消费者和Broker建立通道
3、消费者监听指定的Queue(队列)
4、当有消息到达Queue时Broker默认将消息推送给消费者。
5、消费者接收到消息。