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 中的配置文件更改后,客户端服务读取的还是旧的配置 ...
随机推荐
- JavaScript new对象的四个过程
new 一个对象 function Person(name, age) { this.name = name; this.age = age; } var person = new Person(&q ...
- 启动mongodb报错,无法连接mongodb
报错原因如下: MongoDB shell version v3.4.2 connecting to: mongodb://127.0.0.1:27017 --01T12:: W NETWORK [t ...
- 关于CAShapeLayer的一些基本操作
设置圆形进度条: 实现效果如下: 实现代码如下:(注释很详细啦!!!) UIView *circleView = [[UIView alloc]initWithFrame:CGRectMake(, , ...
- souce and bash 的区别
对于一些环境变量的配置文件,如想使更改后立即生效,多用 souce +file 执行后即可.如/etc/profile 里加了配置, source 和 bash 的区别: source filena ...
- 物联网安全himqtt防火墙数据结构之ringbuffer环形缓冲区
物联网安全himqtt防火墙数据结构之ringbuffer环形缓冲区 随着5G的普及,物联网安全显得特别重要,himqtt是首款完整源码的高性能MQTT物联网防火墙 - MQTT Applicatio ...
- 除了 UCAN 发布的鹿班和普惠体,这些设计工具也来自阿里
在 4 月 27 日的 UCAN 2019 设计大会上,阿里巴巴对外发布了一款全新免费字体——阿里巴巴普惠体.其实,作为经济体的阿里巴巴,这些年早已默默推出了很多实用的设计工具,比如大名鼎鼎的 Ico ...
- IOS div上下滑动效果
内容放在div中 div加样式:width: 100%;height: 100%;z-index: 70;overflow: auto;
- centos7服务搭建常用服务配置之二:Rsync+sersync实现数据实时同步
目录 1.RSYNC数据备份 1.1 rsync服务简介 1.2 rsync特点和优势 1.3 rysnc运行模式简介 1.4 数据同步方式 2 Rsync实验测试 2.1 实验环境说明 2.2 服务 ...
- JS获取URL地址
var url = window.location.href;
- [LuoguP2157][SDOI2009]学校食堂_状压dp
学校食堂 题目链接:https://www.luogu.org/problem/P2157 数据范围:略. 题解: 发现$B$特别小,很容易想到状压. 即在$dp$的时候弄出来$f_{(i,j,k)} ...