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 ...
随机推荐
- C++11的新特性:右值引用
先看代码 #include "pch.h" #include <iostream> #include <string> using namespace st ...
- less:运算
less中的运算 -任何数字.颜色或者变量都可以参加运算,运算应该被包裹在括号中. -例如:+-*. @width: 30px; .box { width: (20 + 5) * @width; } ...
- RPC的解释以及RPC和Restful、RPC和RMI的区别
如何科学的解释RPC 说起RPC,就不能不提到分布式,这个促使RPC诞生的领域. 假设你有一个计算器接口,Calculator,以及它的实现类CalculatorImpl,那么在系统还是单体应用时,你 ...
- Fabric的使用总结
环境说明 建议python版本:2.7 fabric版本:最新版(当前为1.10.2) fabric安装 通过pip.py的方式安装(详细可以在fabric官网了解) fabric执行py文件的方法, ...
- 对Proxy的研究
概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. Proxy 可以理解成,在目标对象之前架设一 ...
- laravel后台账户登录验证(5.5.48版本)
首先我是菜鸟,对laravel框架也不是很熟悉,突然有一天心血来潮就想研究一下laravel的后台登录用户登录的流程, 虽然公司项目中有这样的一套流程,也看了好几遍,越看越简单,越看我就越会了,当自己 ...
- Python3解leetcode Min Cost Climbing Stairs
问题描述: On a staircase, the i-th step has some non-negative cost cost[i]assigned (0 indexed). Once you ...
- python 全栈开发,Day53(jQuery的介绍,jQuery的选择器,jQuery动画效果)
01-jQuery的介绍 1.为什么要使用jQuery 在用js写代码时,会遇到一些问题: window.onload 事件有事件覆盖的问题,因此只能写一个事件. 代码容错性差. 浏览器兼容性问题. ...
- Linux Crontab命令定时任务基本语法
一.Crontab查看编辑重启 1.查看crontab定时执行任务列表 crontab -l 2.编辑crontab定时执行任务 crontab -e 3.删除crontab定时任务 crontab ...
- 20180805-Java ByteArrayOutputStream类
下面的例子演示了ByteArrayInputStream 和 ByteArrayOutputStream的使用: import java.io.* public class ByteStreamTes ...