RabbitMQ的Vhost,Exchange,Queue原理分析
Vhost分析
RabbitMQ的Vhost主要是用来划分不同业务模块。不同业务模块之间没有信息交互。
Vhost之间相互完全隔离,不同Vhost之间无法共享Exchange和Queue。因此Vhost之间数据无法共享和分享。如果要实现这种功能,需要Vhost之间手动构建对应代码逻辑。

如上图所示。 我在Vhost “/”下,无法增加"/testvh"下的wuge.qu.rec,提示我没有对应的信息。
Vhost主要于用户,权限相关。

Vhost其实在用户之间是透明的,Vhost可以被多个用户访问,而一个用户可以同时访问多个Vhost。 例如:wuge可以同时访问"/"和"testvh"
Exchange分析
Exchange主要是数据交换,他并不保存数据,数据都会保存到Queue中。但是注意Exchange是Durable情况下,才满足持久化三个要求之一。

Exchange是属于Vhost的。同一个Vhost不能有重复的Exchange名称。 Exhange有四种类型:fanout,Direct,header,topic (后面会有更详尽的讲解)
Internal表示只能用于Exchange之间进行绑定。不能外部绑定。 Alternate exchange,当发送到这个exchange时候,不存在对应Route Key。那么消息会被发送到Alternate exchange。

Exchange的绑定功能,可以绑定queue,也可以绑定Exchange。这个看具体业务了。
如果绑定数据,需要在分发或者重新被分派,使用To Exchange绑定。如果要被直接处理,使用queue绑定。
如果Exchange绑定了Queue,如果Route Key不对,也会导致数据不可达,被丢掉。(一个数据可以被Queue处理,需要Exchange绑定Queue,并且在Message发送的时候,Route Key 与绑定的Key相等。)
我们发送一个空数据,Route Key随便制定了Hello,消息虽然发送,但是客户获得失败。 说明:Properties主要是RabbitMQ自己的属性,例如,消息状态为持久化。

Queue分析
数据可以保存到队列之后,就可以处理了。


我们这里可以看到,存储状态。是否自动删除自己(现有consumer连接,然后consumer断开,Queue删除自己)。Message TTL (消息保存时间,单位ms), Auto expire(消息通道自动过期,单位ms), Max Length (消息最大数量,当超过的时候,删除)。
Dead letter exchange,当消息不能处理后,向Dead letter exchange发送,这时候路由是Route Key 等于消息Router Key Dead letter routing key,当消息不能处理后,向Dead Letter routing key 发送。这时候Exchange是是Dead letter exchange, Route key等Dead letter routing key.

可以看到Properties里面记录了对应日志状态。消息的来源。
消费现象
RabbitMQ的消息状态
每个消息存储在RabbitMQ中都有自己的状态:Ready,Unacked,Ack
- Ready:等待消费状态。
- Unacked:等待被确认状态,当前消息已经被发送到了客户端。当客户端端断开后,如果这条消息没有被确认,这条消息重新进入Ready中。
RabbitMQ客户端接受消息最大数量
channel.BasicQos(0, 1, false);
- 第一个参数是prefetch_size:这个RabbitMQ没有实现。
- 第二个参数是perfetch_count:这个数字表示没有确认的消息,最多可以接收perfetch_count个数。如果perfetch_count 为1,那么接受到一个消息后,就不能再接受更多的数据了,直到这个msg被确认。
- 第三个参数是global set:设置是否影响全部channel,我们知道一个Connection可以生产多个channel,因此我们可以为全局设置最大perfetch_count;
RabbitMQ的Vhost,Exchange,Queue原理分析的更多相关文章
- Rabbitmq~对Vhost的配置
rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用, ...
- 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...
- 【转】RabbitMQ三种Exchange模式
[转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...
- Handler系列之原理分析
上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...
- Camel运行原理分析
Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...
- [转]Handler MessageQueue Looper消息循环原理分析
Handler MessageQueue Looper消息循环原理分析 Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...
- Handler 原理分析和使用(二)
在上篇 Handler 原理分析和使用(一)中,介绍了一个使用Handler的一个简单而又常见的例子,这里还有一个例子,当然和上一篇的例子截然不同,也是比较常见的,实例如下. import andro ...
- Handler 原理分析和使用(一)
我为什么写Handler,原因主要还在于它在整个 Android 应用层面非常之关键,他是线程间相互通信的主要手段.最为常用的是其他线程通过Handler向主线程发送消息,更新主线程UI. 下面是一个 ...
- Handler 原理分析和使用之HandlerThread
前面已经提到过Handler的原理以及Handler的三种用法.这里做一个非常简单的一个总结: Handler 是跨线程的Message处理.负责把Message推送到MessageQueue和处理. ...
随机推荐
- 在 Visual Studio 生成项目时,会发现一些 dll 并没有被复制到输出目录,导致最终程序的执行错误
发现与解决 检查了一下项目文件,发现是因为这些 dll 文件的引用其中一个叫做 嵌入互操作类型(EmbedInteropTypes)的属性被设为了 True,此时 复制本地 属性会被强制设为 Fals ...
- react.js map遍历的问题
React遍历多个Ant Design中的Upload组件时,随意删除任一个Upload出现了bug,依次点击上传图片后,当点击删除时,倒着删除没有问题,从中间和从开头删问题出现了,出现了类似塌方的效 ...
- BW中DSO的分类及应用
1.DSO的分类,标准DSO(生成主数据标识.对于相同关键字段的值进行合并.可直接出具报表).写优化的DSO(不生成主数据标识.不合并相同关键字段的值.速度快可用于存储大容量数据).直接写入的DSO, ...
- JS中的Map和Set实现映射对象
使用iterable内置的forEach方法 var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // elem ...
- vue.js在visual studio 2017下的安装
1.打开"工具"菜单->"NuGet 包管理器"->"管理解决方案 Nuget 的程序包": 在红色标识的地方输入vue: 2. ...
- CodeIgniter中使用CSRF TOKEN的一个坑
事情的经过是这样的,一个自动化扫描工具说我的代码中存在XSS漏洞,什么是XSS不懂的朋友可以看这里 我的代码里面开启CodeIgniter框架的CSRF Token,如下: 很简单,更多详情参考CI官 ...
- Spring MVC异常统一处理的三种方式
Spring 统一异常处理有 3 种方式,分别为: 使用 @ ExceptionHandler 注解 实现 HandlerExceptionResolver 接口 使用 @controlleradvi ...
- 服务器最大TCP连接数及调优汇总
启动线程数: 启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数 最佳启动线程数和CPU内核数量成正比,和IO阻塞时间成反比.如果任务都是CPU计算型任务,那么线程数最多不超过 ...
- [Tensorflow] Object Detection API - prepare your training data
From: TensorFlow Object Detection API This chapter help you to train your own model to identify obje ...
- 国外源码精品-Android-PullToRefresh 简介与DEMO导入
转载地址:http://my.oschina.net/cuitongliang/blog/170708 (一)&&http://my.oschina.net/cuitongliang/ ...