简介
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写。
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
RabbitMQ支持多种客户端,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
结构图
标注:
蓝色: Client(相对于RabbitmqServer来说)
左边蓝色P:消息生产者,右边蓝色C:消息消费者
绿色:Exchange(消息交换机)
红色:Queue(消息队列)
概念说明
Broker:简单来说就是消息队列服务器实体。
Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
producer:消息生产者,就是投递消息的程序。
consumer:消息消费者,就是接受消息的程序。
channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
消息队列使用过程
(1)客户端连接到消息队列服务器,打开一个channel。
(2)客户端声明一个exchange,并设置相关属性。
(3)客户端声明一个queue,并设置相关属性。
(4)客户端使用routing key,在exchange和queue之间建立好绑定关系。
(5)客户端投递消息到exchange。exchange接收到消息后,就根据消息的key和已经设置的binding,进行消息路由,将消息投递到一个或多个队列里。
推荐
[翻译] [RabbitMQ+Python入门经典] 兔子和兔子窝
http://blog.ftofficer.com/2010/03/translation-rabbitmq-python-rabbits-and-warrens/
这篇文章讲的技术是RabbitMQ+Python,技术用的不一样可以不看技术,概念方面个人觉得讲的很生动形象,帮助初学者对其中一些概念有更深入的了解。