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原理分析的更多相关文章

  1. Rabbitmq~对Vhost的配置

    rabbitmq里有一些概念我们要清楚,如vhost,channel,exchange,queue等,而前段时间在部署rabbitmq环境时启用了虚拟主机vhost,感觉他主要是起到了消息隔离的作用, ...

  2. 8、RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较

    RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较 RabbitMQ中,除了Simple Queue和Work Queue之外的所有生产者提交的消息都由Exc ...

  3. 【转】RabbitMQ三种Exchange模式

    [转]RabbitMQ三种Exchange模式 RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 RabbitMQ提供了四 ...

  4. Handler系列之原理分析

    上一节我们讲解了Handler的基本使用方法,也是平时大家用到的最多的使用方式.那么本节让我们来学习一下Handler的工作原理吧!!! 我们知道Android中我们只能在ui线程(主线程)更新ui信 ...

  5. Camel运行原理分析

    Camel运行原理分析 以一个简单的例子说明一下camel的运行原理,例子本身很简单,目的就是将一个目录下的文件搬运到另一个文件夹,处理器只是将文件(限于文本文件)的内容打印到控制台,首先代码如下: ...

  6. [转]Handler MessageQueue Looper消息循环原理分析

    Handler MessageQueue Looper消息循环原理分析   Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...

  7. Handler 原理分析和使用(二)

    在上篇 Handler 原理分析和使用(一)中,介绍了一个使用Handler的一个简单而又常见的例子,这里还有一个例子,当然和上一篇的例子截然不同,也是比较常见的,实例如下. import andro ...

  8. Handler 原理分析和使用(一)

    我为什么写Handler,原因主要还在于它在整个 Android 应用层面非常之关键,他是线程间相互通信的主要手段.最为常用的是其他线程通过Handler向主线程发送消息,更新主线程UI. 下面是一个 ...

  9. Handler 原理分析和使用之HandlerThread

    前面已经提到过Handler的原理以及Handler的三种用法.这里做一个非常简单的一个总结: Handler 是跨线程的Message处理.负责把Message推送到MessageQueue和处理. ...

随机推荐

  1. [svc]glusterfs的简单部署

    服务端安装 gluster01主机挂载磁盘 [root@glusterfs01 ~]# mkfs.xfs /dev/sdb [root@glusterfs01 ~]# mkdir -p /data/b ...

  2. 多进程vs多线程

    多进程模式最大的优点就是稳定性高,因为一个子进程崩溃了,不会影响主进程和其他子进程.(当然主进程挂了所有进程就全挂了,但是Master进程只负责分配任务,挂掉的概率低)著名的Apache最早就是采用多 ...

  3. Java 汇编代码

    https://shipilev.net/blog/2015/black-magic-method-dispatch/ https://github.com/shipilev/article-meth ...

  4. windows下安装pycharm并连接Linux的python环境

    1. 下载安装Pycharm专业版 具体方法略.Pycharm5激活方法参考http://www.cnblogs.com/snsdzjlz320/p/7110186.html 2. 添加配置连接远程服 ...

  5. iOS 版本更新(强制更新)检测问题

    iOS 版本更新(强制更新)检测问题 通常iOS系统中是默认设置再wifi状态,且网络状况良好下自己更新应用的. 但是如果用户设置了不自动更新,但是我们的APP出现重要的版本,一定需要用户更新的情况下 ...

  6. 一篇文全面了解DevOps:从概念、关键问题、兴起到实现需求

    一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 转自:一篇文全面了解DevOps:从概念.关键问题.兴起到实现需求 2018-06-06 目前在国外,互联网巨头如Google.Faceb ...

  7. LRN和Batch Norm

    LRN LRN全称为Local Response Normalization,局部相应归一化层. message LRNParameter { optional uint32 local_size = ...

  8. java中job运行时间

    long startTime=System.currentTimeMillis();//记录开始时间 method();//此处为你调用的方法 long endTime=System.currentT ...

  9. Vue中的computed属性

    阅读Vue官网的过程中,对于计算属于与监听器章节的内容有点理解的不清晰:https://cn.vuejs.org/v2/guide/computed.html. 后来上网查询了资料,结合官网的说明,总 ...

  10. opencv2/nonfree/nonfree.hpp:没有那个文件或目录

    致命错误: opencv2/nonfree/nonfree.hpp:没有那个文件或目录 fatal error: opencv2/nonfree/nonfree.hpp: No such file o ...