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和处理. ...
 
随机推荐
- 10.翻译系列:EF 6中的Fluent API配置【EF 6 Code-First系列】
			
原文链接:https://www.entityframeworktutorial.net/code-first/fluent-api-in-code-first.aspx EF 6 Code-Firs ...
 - Docker 以 docker 方式运行 jenkins
			
https://testerhome.com/topics/5798 Docker 以 docker 方式运行 jenkins jmcn · 2016年08月26日 · 最后由 blueshark 回 ...
 - MySQL  数据的  截取,数据清洗
			
Mysql字符串截取函数SUBSTRING的用法说明 函数: 1.从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) 例:select left(conte ...
 - Spring Boot 2.0 入门指南
			
0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起. 0x02 ...
 - win8使用技巧
			
windows 8操作系统相信大家已经不再陌生了,虽然正式版本还未发布,但不少朋友已经在使用微软事先推出的windows 消费者预览版,直白的说就是公测版,预览版是免费的,但仅可以使用一年,但其功能与 ...
 - [k8s]通过openssl生成证书
			
证书认证原理: http://www.cnblogs.com/iiiiher/p/7873737.html [root@m1 ssl]# cat master_ssl.cnf [req] req_ex ...
 - 【XMPP】XMPP类型
			
1.ConnectionConfiguration 作为用于与XMPP服务建立连接的配置.它能配置:连接是否使用TLS,SASL加密. 包含内嵌类:ConnectionConfiguration.Se ...
 - jquery 动画总结(主要指效果函数)
			
动画无非两类:帧动画frame和变形动画tween,以及3d动画.不论web还是安卓苹果app,动画原理都是这些. web app 动画实现的途径,无非这几种:1 gif动画---这就是帧动画,把若干 ...
 - Intellij IDEA 2015 导入MyEClipse工程
			
一.步骤说明 File->New->Projet from existing sources,选择要导入的项目,并且导入项目; 打开 “open module settings”进行设置: ...
 - Java----------JMX规范
			
作者:郭无心链接:https://www.zhihu.com/question/36688387/answer/68667704来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...