因为网上有一篇很好的RMQ的入门帖子http://lostechies.com/derekgreer/tag/rabbitmq/,所以我就不多说了,就说说我目前看了该作者1~5章后,自己的心得。(所以要看懂我写的内容,需要看完那个作者写的1~5章。你可以先跳过这一篇,因为我后面的博文会依次分析该作者的文章的,等分析完1~5章,就可以回过头来看我写的这篇了)

首先,装好RMQ,且激活了Web管理服务之后(需要先暂停服务,然后重启,看帖子),就可以通过http://localhost:15672来访问了(用户名/密码是:guest/guest,这个虽然叫guest但是确实超级管理员权限)。

这个网页其实很有意思,到目前为止,我觉得非常有用的内容是,他里面可以看到你声明的Queue,Exchange,RoutingKey(这个要点击某个Exchange才能看到)。看到这些有什么用呢?最重要的一点就是,他们是真实存在的!而且存在于RMQ服务器上!不存在于Producer,也不存在于Consumer。换句话说,他们不会随着你的程序的消亡而消亡!(当然你程序让他们死,他们当然会死,我指的是一般情况。)好,在展开一下,假如你的程序里面声明了一个不会自动消亡的Queue和一个Exchange,那么第一次运行,这2个对象就被创建出来了,那么他们就永远存在,第二次运行,你就不必再声明了。这就是为什么,RabbitMQ.Client里面某些参数都是字符串,而不是一般类库的对象实例。

那个作者其实没有明确交代清楚几个基本的概念:

1. Consumer是直接从Queue里面取消息的,不用经过Exchange。这点要牢记,而且从所有取消息的API,只接受Queue的名字,就可以印证。

2. Producer要发送消息,是不能直接往Queue里面发的,必须经过Exchange,而且发消息一定要指定RoutingKey。这个也可以从发消息的API得到印证。

3. Exchange和Queue(可以一对多)彼此是通过RoutingKey这条“纽带”来绑定的!Exchange、RoutingKey、Queue这三者关系紧密。这个也要牢记!发消息的时候,需要指定的是Exchange和RoutingKey,无法指定Queue。这个很Make Sense吧!有点像MVC的关系(Producer是Model,将消息(with RoutingKey)传给Exchange,Exchange是Controller来派发消息到指定的Queue(s))。

4. Exchange有4种类型:Direct、Fanout、Topic、Headers。这个看后面4张图就基本可以了解。

5. RMQ提供了一个默认的Exchange,名字是空字符串。他是Direct类型的,绑定到所有的Queue(而且每一个Queue和这个无名Exchange之间的RoutingKey是Queue的名字)。那个作者是这样说的:每当你声明了一个Queue,就会有一个默认的Exchange。我也不知道他说的对不对,反正就有那么一个默认的Exchange就对了。这个不用你显式声明(就存在)就对了。

这里贴一下PEQC关系图:

这里贴一下Exchange4种类型:Direct、Fanout、Topic、Headers。

文章转自:http://blog.csdn.net/puncha/article/details/8449273

RabbitMQ学习之:(一)初识、概念及心得的更多相关文章

  1. rabbitmq学习笔记2 基本概念

    官网:http://www.rabbitmq.com 参考:http://blog.csdn.net/column/details/rabbitmq.html   1 基本概念 rabbitmq se ...

  2. RabbitMQ学习总结(1)-基础概念

    1. 概念 1.1 AMQP协议 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消 ...

  3. RabbitMQ学习总结(1)——基础概念详细介绍

    一.基础概念详细介绍 1.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松 ...

  4. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  5. RabbitMQ学习总结 第三篇:工作队列Work Queue

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  6. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  7. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  8. RabbitMQ学习总结

    关于RabbitMQ是什么以及它的概念,不了解的可以先查看一下下面推荐的几篇博客 https://blog.csdn.net/whoamiyang/article/details/54954780 h ...

  9. RabbitMq基础教程之基本概念

    RabbitMq基础教程之基本概念 RabbitMQ是一个消息队列,和Kafka以及阿里的ActiveMQ从属性来讲,干的都是一回事.消息队列的主要目的实现消息的生产者和消费者之间的解耦,支持多应用之 ...

  10. RabbitMQ学习(一):RabbitMQ要点简介

    转载:http://blog.csdn.net/leixiaotao_java/article/details/78909760#t0 1.什么是RabbitMQ? RabbitMQ是由Erlang语 ...

随机推荐

  1. iOS:多线程NSThread的详细使用

    NSThread具体使用:直接继承NSObject NSThread:. 优点:NSThread 是轻量级的,使用简单 缺点:需要自己管理线程的生命周期.线程同步.线程同步对数据的加锁会有一定的系统开 ...

  2. 算法之排序Low B三人组

    有序区:有的地方的数据已经完全变得有顺序,我们把这部分区域的数据成为有序区无序区:有的地方的数据依旧无序,我们把这部分数据成为无序区时间复杂度:用来估计算法运行时间的一个式子(单位)空间复杂度:用来评 ...

  3. 非意外的PDB错误 OK(0)

    用ib编项目会出现这个error 用vs重新编译全部 就没有问题 ib的设置改下 Visual Studio Builds--Advanced --PDB File Allocation Force ...

  4. Django开发流程及实例

    创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...

  5. mac osx加入全局启动terminal快捷键

    尽管有非常多第三方工具(Alfred.keyboad Maestro)能够设置全局启动terminal快捷键,但怎么感觉都不如native的好,呵呵.本文就使用mac 自带的Automator来创建一 ...

  6. 防止继承和覆盖(PHP类)

    可能出现需求:我们不希望继承的类覆盖abstract类中的某个方法. 解决方案:我们可以在某个方法前面加上final关键词,可以防止继承的类覆盖它并实现继承类自己的版本. 继承类仍然可以访问和调用这些 ...

  7. C#秘密武器之特性

    一.概述 Attribute说白了就是一个类而已,里边一般含有一些附加信息,或者一些特殊的处理逻辑,以便告诉编译器应用该特性的东东是个奇葩,需要特殊对待! 二.使用时的注意事项 2.1. Attrib ...

  8. A-Z排序控件的实现

    前言 最近项目需要做一个地区首字母a-z排序的效果,记录一下自己如何实现的. 先看下效果图: 分析 这种效果自己实现还是第一次;之前见过这种效果: 这些字母都是onDraw画上去的;只要知道每个字母的 ...

  9. 优秀运维人员20道必会iptables面试题(转载)

    (一)企业面试口试题 1.详述iptales工作流程以及规则过滤顺序? 2.iptables有几个表以及每个表有几个链? 3.iptables的几个表以及每个表对应链的作用,对应企业应用场景? 4.画 ...

  10. jConsole,jvisualvm和jmap使用

    JConsole     JConsole 是一个内置 Java 性能分析器,可以从命令行或在 GUI shell 中运行.可以轻松地使用 JConsole来监控 Java 应用程序性能和跟踪 Jav ...