因为网上有一篇很好的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. Qunit的使用

    1.新建一个html页面,如下 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "ht ...

  2. unity pbr

    https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf 参数

  3. 【Shell】linux中shell变量$#,$@,$0,$1,$2的含义解释 && set 关键字使用

    linux中shell变量$#,$@,$0,$1,$2的含义解释   摘抄自:ABS_GUIDE 下载地址:http://www.tldp.org/LDP/abs/abs-guide.pdf linu ...

  4. 如何使用 awk 的 ‘next’ 命令

    导读 在 awk 系列文章中,我们来看一下next 命令 ,它告诉 awk 跳过你所提供的所有剩下的模式和表达式,直接处理下一个输入行.next 命令帮助你阻止运行命令执行过程中多余的步骤. 要明白它 ...

  5. 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-为什么没有自动识别成标准FBD功能块

    新建一个项目,是不会自动把FBD对应名称的模块识别成标准功能块的   你需要引入相应的类库重新输入FBD   然后才会自动生成     更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: ht ...

  6. Windows开机出现提示“nwsvc.exe”错误怎么办

    开机时出现错误提示: Microsoft Visual C++ Runtime Library Runtime Error! Program: C:\Windows\system32\nwsvc.ex ...

  7. 关于Fragment的懒加载问题

    为了达到界面效果,我们有时需要使用到TabLayout+ViewPager的方式来布局界面,然而ViewPager的adapter总是默认把与当前可见的fragment相邻的两个fragment给加载 ...

  8. Hadoop-2.4.1学习之Streaming编程

    在之前的文章曾提到Hadoop不仅支持用Java编写的job,也支持其他语言编写的作业,比方Hadoop Streaming(shell.python)和Hadoop Pipes(c++),本篇文章将 ...

  9. 《Java程序猿面试笔试宝典》之 什么是AOP

    AOP(Aspect-Oriented Programming.面向切面编程)是对面向对象开发的一种补充,它同意开发者在不改变原来模型的基础上动态地改动模型从而满足新的需求.比如.在不改变原来业务逻辑 ...

  10. Drupal中的模块载入

    什么是模块载入?首先说载入,这里的载入是指require_once.模块载入就是指require_once模块目录中的某个PHP文件. 每个Drupal模块都应该有自己的主文件.模块主文件以模块名开始 ...