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和处理. ...
随机推荐
- Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上
对于大文件来说,通过远程桌面拷贝是件麻烦的事情,虽然简单,但速度受限太多,不推荐使用. 我工作中对于大文件的拷贝,通过创建一个新的虚拟硬盘(VHD),再把大文件拷贝至虚拟硬盘中,最后附加到虚拟机上. ...
- GuavaCache学习笔记三:底层源码阅读
申明:转载自 https://www.cnblogs.com/dennyzhangdd/p/8981982.html 感谢原博主的分享,看到这个写的真好,直接转载来,学习了. 另外也推荐另外一篇Gua ...
- Android开发(十六)——Android listview onItemClick事件失效的原因
参考: Android listview onItemClick事件失效的原因.http://blog.csdn.net/wangchun8926/article/details/8793178
- NodeJS的url验证库模块url-valid
这是我10月份做的项目其中的一个部件,主要用于url检验的. 我们知道Javascript做url检验,通常是使用正则表达式来判定,其格式是否正确,例如: /^https?:\/\//.test(ur ...
- Extjs4 DateTimeField,日期时间控件完美版
网上若干类似的控件,要么是有bug,要么是操作体验不合理,这里贡献一个比较科学的版本. 扩展包下载: http://files.cnblogs.com/qidian10/Ext.ux.rar 解压至E ...
- JDK8+Tomcat8配置https【转】
生成密钥对 我比较喜欢密钥对这个名字,因为它非常明确了HTTPS在传输过程中需要的两个钥匙(公钥和私钥).如果不太了解HTTPS的,可以要到搜索引擎去搜索一下HTTPS的原理. 首先,确保java的目 ...
- Eclipse 4.4(luna) 安装Veloeclipse 2.0.8时报错的问题
在Eclipse下编辑Velocity模板的插件,支持语法着色,代码向导等功能,简单好用,没有可视化编辑. Eclipse的更新地址是:http://veloeclipse.googlecode.co ...
- Mysql系列五:数据库分库分表中间件mycat的安装和mycat配置详解
一.mycat的安装 环境准备:准备一台虚拟机192.168.152.128 1. 下载mycat cd /softwarewget http:-linux.tar.gz 2. 解压mycat tar ...
- ORA-00001: unique constraint (...) violated并不一定是数据冲突
原文链接:http://blog.163.com/jet_it_life/blog/static/205097083201301410303931/ 收到一位测试人员RAISE的JIRA,说在某张表上 ...
- How can I get the baseurl of site?
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority +Request.ApplicationPa ...