Linux云计算运维架构师(连载)-消息队列-RabbitMQ-03

Linux云计算运维架构师(连载)-消息队列-RabbitMQ-02

5.1 RabbitMQ详解

5.1.1 RbbitMQ简介

RabbitMQ是一个在AMQP(Advanced Message Queuing Protocol)基础上实现的,可复用的企业消息系统。它可以用于大型软件系统,各个模块之间的高效通信,支持高并发,支持可扩展。它支持在多种平台上运行,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

AMQP,即Advanced Message Queuing Protocol,它是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

5.1.2 RabbitMQ的特点

随着社会的发展,RabbitMQ被越来越多的人认可,这和它的易用性、扩展性、可靠性和高可用性等方面的优点密不可分。RabbitMQ的具体特点如下所示。

l 可靠性

RabbitMQ内部设置了机制保证消息的可靠传输及持久化。

l 灵活的路由

在消息进入消息队列之前,需要依靠交换机来路由消息。RabbitMQ拥有内置交换器可以实现比较简单的路由功能。若系统需要更复杂的路由功能,也可以将多个交换器绑定在一起,再配合RabbitMQ的插件机制来实现自己的交换器。

l 扩展性

多个RabbitMQ可以组成消息队列集群,根据业务需求对集群动态扩展。

l 高可用性

可以在RabbitMQ集群中的服务器上设置镜像或配置高可用服务,使得在部分机器出现问题的情况下系统依然可以正常提供服务。

l 多种协议

除了支持AMQP协议,RabbitMQ还支持STOMP、MQTT等多种消息。

l 多语言客户端

RabbitMQ几乎支持所有的常用语言,可以在各大平台上运行。

l 管理界面

RabbitMQ自带用户界面,简洁易用,用户可以便捷的监控和管理消息、集群中的节点等。

l 插件机制

RabbitMQ支持非常多的插件(包括自己编写的插件),可以从多方面对其进行扩展。

5.1.3 RabbitMQ的常用术语

RabbitMQ的常用术语如下所示。

l Message

消息,是有消息头和消息体组成的。消息体是不透明的,消息体是由一些可选属性组成的,包括路由键(routing-key)、优先级(priority)、持久性存储(delivery-mode)等。

l Publisher

消息生产者,是向交换器发送消息的客户端程序,可以简单理解为就是一个Java程序。

l Exchange

交换器,用来接收生产者发送的消息,并将这些消息路由发送给服务器中的队列。消息要先经过交换器,再到队列中去。常见的三种交换器类型如下所示。

Direct:发布与订阅,完全匹配。我们可以简单理解为一对一的关系,一个交换器将消息发送给一个队列,是完全匹配的。

Fanout:广播,所有订阅该广播的队列都可以收到该消息。广播式交换器,不管消息的ROUTING_KEY设置为什么,Exchange都会将消息转发给所有绑定的Queue。

Topic:主题,规则匹配。