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的基本概念与原理(一)的更多相关文章
- RabbitMQ基本概念和原理
RabbitMQ基本概念和原理 1.AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计. 2.Rabb ...
- RabbitMQ(1) 核心概念
消息中间价 消息中间价,也称消息队列,是分布式式系统中常用的中间价. 通过消息中间价传递消息,使得各个子系统解耦,异步通信. 目前业界有许多消息队列的实现,如RabbitMQ.Kafka.Active ...
- Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之ORACLE集群概念和原理(二)
ORACLE集群概念和原理(二) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总.然后形成体 ...
- Java中的泛型 (上) - 基本概念和原理
本节我们主要来介绍泛型的基本概念和原理 后续章节我们会介绍各种容器类,容器类可以说是日常程序开发中天天用到的,没有容器类,难以想象能开发什么真正有用的程序.而容器类是基于泛型的,不理解泛型,我们就难以 ...
- Java线程:概念与原理
Java线程:概念与原理 一.操作系统中线程和进程的概念 现在的操作系统是多任务操作系统.多线程是实现多任务的一种方式. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程 ...
- 【转】Bloom Filter布隆过滤器的概念和原理
转自:http://blog.csdn.net/jiaomeng/article/details/1495500 之前看数学之美丽,里面有提到布隆过滤器的过滤垃圾邮件,感觉到何其的牛,竟然有这么高效的 ...
- Java IO学习笔记:概念与原理
Java IO学习笔记:概念与原理 一.概念 Java中对文件的操作是以流的方式进行的.流是Java内存中的一组有序数据序列.Java将数据从源(文件.内存.键盘.网络)读入到内存 中,形成了 ...
- iptables实用教程(一):基本概念和原理
概述 iptables是linux自带的防火墙软件,用于配置IPv4数据包过滤或NAT(IPv6用ip6tables). 在linux上,防火墙其实是系统内核的一部分,基于Netfilter构架,基本 ...
- 通过实例理解 RabbitMQ 的基本概念
先说下自己开发的实例. 最近在使用 Spring Cloud Config 做分布式配置中心(基于 SVN/Git),当所有服务启动后,SVN/Git 中的配置文件更改后,客户端服务读取的还是旧的配置 ...
随机推荐
- Qt编写安防视频监控系统4-删除视频
一.前言 一般会有两种处理方式来删除视频,一种是鼠标右键菜单,删除当前视频或者删除所有视频,一种是直接按住当前视频,移到视频通道界面以外就表示删除当前视频,这也是个比较人性化的设置,每个人的喜好不一样 ...
- 机器阅读理解综述Neural Machine Reading Comprehension Methods and Trends(略读笔记)
标题:Neural Machine Reading Comprehension: Methods and Trends 作者:Shanshan Liu, Xin Zhang, Sheng Zhang, ...
- js时间戳转为日期函数
js时间戳转为日期函数 function add0(m){ return m<10?'0'+m:m; } //timestamp参数示例:1501234567 function format(t ...
- Python 利用二分法查询数据
一. 二分法的适用条件 二分法查找适用于数据量较大时, 但是数据需要先排好顺序. 优点: 二分法查找效率特别高 缺点: 二分法只适用于有序序列 二. 二分法的主要思想是:设查找的数组区间为array[ ...
- 基于LSTM + keras 的诗歌生成器
最近在github 上发现了一个好玩的项目,一个基于LSTM + keras 实现的诗歌生成器,地址是:https://github.com/youyuge34/Poems_generator ...
- shell脚本中set -e作用
最近学习shell脚本想到一个问题,如果脚本中出现了一条异常语句,甚至可以影响整个脚本的使用,那么是否有一旦出现问题就可以及时停止的方法呢?在shell脚本中set命令就可以轻松实现.set命令的-e ...
- Cracking the coding interview目录及资料收集
前言 <Cracking the coding interview>是一本被许多人极力推荐的程序员面试书籍, 详情可见:http://www.careercup.com/book. 第六版 ...
- java中序列化的作用
一 什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...
- 【计算机视觉】Opencv中的Face Detection using Haar Cascades
[计算机视觉]Opencv中的Face Detection using Haar Cascades 标签(空格分隔): [图像处理] 声明:引用请注明出处http://blog.csdn.net/lg ...
- 在UPW中使用VLC解码媒体
VLC支持的格式很全,学会如何使用后,完全可以自己给自己写一个简单的万能播放器了. 源码来自github:https://github.com/kakone/VLC.MediaElement.git( ...