RabbitMQ的基本概念与原理
Posted php-linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RabbitMQ的基本概念与原理相关的知识,希望对你有一定的参考价值。
1、什么是MQ?
MQ全称为Message Queue, 顾名思义,即消息队列,它是一种应用程序对应用程序的通信方法。MQ是消费-生产者模型的一个典型的代表,生产者不断的往消息队列中不断写入消息,消费者则可以读取或者订阅队列中的消息,生产者和消费者不需要知道对方是谁,一个负责发消息,一个负责收消息,MQ是遵循了AMQP(高级消息队列协议)的具体实现和产品。
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。
2、RabbitMQ是什么?
RabbitMQ是流行的开源消息队列系统,用erlang语言开发。RabbitMQ是AMQP的标准实现,支持Windows,linux等多种操作系统和Java,php等多种编程语言。
3、RabbitMQ的一些基本概念
这是一个在网上流传甚广的RabbitMQ的图,我从百度百科偷来的(好吧,我这个渣渣承认我画不出来这么好看的图,给当初的作图者赞一个)
(1)Producer:生产者,负责生产消息以及投递消息到Exchange(交换机)
(2)Exchange:交换机,根据交换机类型的不同,按照不同的规则,通过RoutingKey(路由键)投递到某个Queue(队列)里
(3)RoutingKey:路由键,通过RoutingKey(路由键)将Queue(队列)与Exchange(交换机)Binding(绑定)在一起, Exchange(交换机)通过RoutingKey(路由键)将消息投递到某个Queue(队列)
(4)Queue:队列,消息都存放在Queue(队列)里,Exchange(交换机)通过RoutingKey(路由键)将消息投递到某个Queue(队列)
(5)Binding:绑定,通过RoutingKey(路由键)将Queue(队列)与Exchange(交换机)Binding(绑定)在一起
(6)Consumer:消费者,负责从Queue(队列)里取消息及消费消息
(7)Channel:信道。信道(Channel)是多路复用连接中的一条独立的双向数据流通道,消息发布接受订阅都依靠信道完成。
(8)Vhost:虚拟主机,即消息队列服务器实体
4、RabbitMQ的工作流程
(一)发送流程
(1)Producer(生产者)连接到Vhost(消息队列服务器)
(2)Producer(生产者)创建声明一个Exchange(交换机),设置其属性
(3)Producer(生产者)投递Msg(消息)和RoutingKey(路由键)到Exchange(交换机)
(二)消费过程
(1)Consumer(消费者)连接到Vhost(消息队列服务器)
(2)Consumer(消费者)连接到Exchange(交换机),设置其属性
(3)Consumer(消费者)创建声明一个Queue(队列),设置其属性
(4)Consumer(消费者)通过RoutingKey(路由键),将Exchange(交换机)和Queue(队列)Binding(绑定)
(5)Exchange(交换机)接收到Msg(消息)后,根据RoutingKey(路由键)和Binding(绑定),将Msg(消息)进行路由
,将Msg(消息)投递到Queue(队列)里
(6)Consumer(消费者)取出Queue(队列)里的Msg(消息)进行消费
整个过程类似网络层路由器对数据包的路由的过程
即主机A(生产者)发送了一个数据包(消息)到了路由器(交换机),然后路由器(交换机)根据其协议地址(路由键)将数据包(消息)发送到主机B(消费者)
以上是关于RabbitMQ的基本概念与原理的主要内容,如果未能解决你的问题,请参考以下文章