码迷,mamicode.com
首页 > 其他好文 > 详细

RabbitMQ的基本概念与原理(一)

时间:2019-08-03 11:20:22      阅读:87      评论:0      收藏:0      [点我收藏+]

标签:proc   java   接受   doc   虚拟   copy   限制   独立   png   

 

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的基本概念与原理(一)

标签:proc   java   接受   doc   虚拟   copy   限制   独立   png   

原文地址:https://www.cnblogs.com/php-linux/p/11293874.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!