RabbitMQ ——整体架构
一 .概述
从整体上讲Rabbitmq就是一个生产者消费者的模型.

我们将中间的整个broker就当做是一个消息中间件的实体就可以了.
单从这个方面上讲,生产者发送消息到broker上面,然后消费者从broker之中获取数据,最终完成数据的通信任务.
二 .broker的结构
我们的一个Rabbitmq可以称为是一个broker,我们一般情况下就当做是一个消息中间件的实例.
人为的,Rabbitmq将整个Broker划分成多个Vhosst,我们可以认为是一个一个的逻辑的空间,这些逻辑空间之间是相互隔离的.
我们一般情况下,在一次的生产和消费的过程之中只会使用一个Vhost.
三 .Vhost的结构
在上面我们说到Vhost是一个逻辑的空间,在这个逻辑的空间之中存在大量的exchange和queue,首先我们不去管exchange和queue之间是怎么连接的.
也就是说,我们只要知道一个vhost就是存储一堆的exchange和queue的存储空间就可以 了.
四 .exchange
和其它的消息中间的最大区别,就是在amqp协议之中的exchange的概念,我们现在可以将exchange当做是一个转发的代理.
它本身仅仅提供的功能就是帮助实现路由的转换,帮助将消息转发到对应的消息队列上面.
在下面我们会说交换机的类型的概念,这是一个比较复杂的概念.
五 .消息队列
消息队列就是最终存储消息的地方,也是整个消息中间件之中最为重要的一个地方,消息队列和消费者联系,决定消费者到底能够获取到什么样的消息.

多个消费者可以订阅一个队列的内容,但是队列会按照轮询的方式进行消息的发送,我们在后面有办法改变这样的行为.
六 . 联系
现在我们需要说明在整个Rabbitmq之中最为复杂的一个概念,路由键,绑定建和绑定的概念了.
我们首先可以这样理解绑定,绑定就是建立联系,但是绑定是否生效需要看路由键和绑定建的设置情况.
在介绍具体的联系之前,我们需要对exchange的类型做一个了解.
七.exchange的类型
在Rabbitmq之中,现在一般可以划分成四种类型,这四种类型我们称为Rabbitmq最基本的类型.
[1]direct类型:

在上面的图中,描述了一个direct类型的exchange.
对于direct类型的交换机,它只会讲消息交给路由键和消息队列一致的消息队列.
比如,上面的图中定义了多个绑定,当发送
路由键为info的消息的时候,消息会被路由到队列2上面.
路由键为waring的消息的时候,消息就会被路由到队列1和队列2上面.
从这个上面,我们也能够知道发送一个消息我们需要制定一个交换机,然后制定一个路由键.
然后交互机会根据自己的类型和消息中附带的路由键找到对应的消息队列,是否真正的发送需要和绑定建进行比对.
比如上面的图中,我们知道交换机和消息队列进行了绑定,绑定的规则定义了4中,但是仅仅只有两个关系.
[2]fanout类型
fanout类型是一个最直接的类型,只要消息到达这样的交互机,它上面都不管,只要有队列和我有联系,我就将消息交给他.

如上图,一个消息到达了交换机,它上面都不管,直接将消息交给了有连接的队列之中.
[3]topic交换机
这种交互机比较器之前的类型,就是多了一个模糊匹配的功能.
在Rabbitmq之中,使用了#和*代表模糊查找的占位符.
其中:#表示多个单词 ,*表示一个单词.

我们看看上面图:
当我们的消息的路由键的值为usa.news,那么消息可以成功了路由到队列1和队列2.
当为usa.weather的时候,会路由到队列1队列3.
RabbitMQ ——整体架构的更多相关文章
- Spring的设计理念和整体架构
1.Spring的各个子项目 Spring Framework(Core):这是我们熟知的Spring项目的核心.Spring Framework(Core)中包含了一系列Ioc容器的设计,提供了依赖 ...
- 深度解读MRS IoTDB时序数据库的整体架构设计与实现
[本期推荐]华为云社区6月刊来了,新鲜出炉的Top10技术干货.重磅技术专题分享:还有毕业季闯关大挑战,华为云专家带你做好职业规划. 摘要:本文将会系统地为大家介绍MRS IoTDB的来龙去脉和功能特 ...
- 【深入浅出jQuery】源码浅析--整体架构
最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...
- Underscore 整体架构浅析
前言 终于,楼主的「Underscore 源码解读系列」underscore-analysis 即将进入尾声,关注下 timeline 会发现楼主最近加快了解读速度.十一月,多事之秋,最近好多事情搞的 ...
- jQuery 2.0.3 源码分析core - 整体架构
拜读一个开源框架,最想学到的就是设计的思想和实现的技巧. 废话不多说,jquery这么多年了分析都写烂了,老早以前就拜读过, 不过这几年都是做移动端,一直御用zepto, 最近抽出点时间把jquery ...
- [转]Android App整体架构设计的思考
1. 架构设计的目的 对程序进行架构设计的原因,归根到底是为了提高生产力.通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点, ...
- jQuery整体架构源码解析(转载)
jQuery整体架构源码解析 最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性, ...
- 《深入理解bootstrap》读书笔记:第二章 整体架构
一. 整体架构 1. CSS-12栅格系统 把网页宽度均分为12等分(保留15位精度)--这是bootstrap的核心功能. 2.基础布局组件 包括排版.按钮.表格.布局.表单等等. 3.jQu ...
- Nginx的负载均衡 - 整体架构
Nginx的负载均衡 - 整体架构 Nginx版本:1.9.1 我的博客:http://blog.csdn.net/zhangskd Nginx目前提供的负载均衡模块: ngx_http_upstre ...
随机推荐
- idea 配置自动编译 livereload
1 pom中添加 spring-boot-devtools 依赖 <dependency> <groupId>org.springframework.boot</grou ...
- Linux 查找指定内容在哪个文件中
在实际的工作中,忘记配置项放在哪个文件中时,可借助命令来查询. eg: 1.grep -r "查询内容" 文件目录 #这样查询出来的包括文件名+内容 grep -r -l ...
- django之项目部署知识点
一:项目部署的框架 nginx和uWSGI在生产服务器上进行的部署 二:什么是nginx? nginx是一个web服务器. 什么是web服务器? web服务器则主要是让客户可以通过浏览器进行访问,处理 ...
- 使用django 的cache设置token的有效期
from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import A ...
- linux下将一系列.o文件打包成.a文件
参考链接:https://www.cnblogs.com/joshtao/p/7380627.html
- 流氓软件修改IE主页的解决方法
运行regedit HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main 修改以下url Default_Page_URL Firs ...
- [luogu]P1016 旅行家的预算[贪心]
[luogu]P1016 旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单位).每升汽油能 ...
- (转)基于TLS证书手动部署kubernetes集群(下)
转:https://www.cnblogs.com/wdliu/p/9152347.html 一.master节点组件部署 承接上篇文章--基于TLS证书手动部署kubernetes集群(上),我们已 ...
- Centos6.5在线配置安装Java环境与Tomcat环境
书写此文一来记录环境,以便后期查看使用,Linux环境下配置centos与Java开发环境 本文环境:虚拟机系统centos6.5 链接工具:xshell脚本链接工具 一.安装Java开发 ...
- php面试专题---21、MVC框架基本工作原理考察点
php面试专题---21.MVC框架基本工作原理考察点 一.总结 一句话总结: 会的东西快速过,不要浪费时间,生命有限,都是一些很简单的东西. 1.mvc框架单一入口的 优势 是什么? 可以进行统一的 ...