花点时间重新把rabbitMQ的整体流程粗略的梳理了一遍,便于理解。总体来说,消息产生者->queue->消息消费者可以图解如下:

文字解说:消息产生者 producter 和 consumer 通过 TCP 连接到 rabbitmq server 进行消息的发生和接收,且消息数据的传递都是在 Channel 中进行。每一个 message 经产生后发送给交换器 exchange 时,会带一个路由键 Routing key,用于与 Binding Key 配合,标记这是属于哪个 queue 的消息。exchange 并不会对消息进行存储,而是起到一个枢纽的作用,通过 Binding Key 指定当前的 Exchange 下什么样的  Routing Key 对应到什么样的 queue ,即消息应该属于哪个 queue 。消费者 consumer 从 queue 中获取消息,针对同一个 queue 可以有多个不同的消费者,但是此时 queue 中的消息会被平均分摊给这些消费者进行处理,而不是每个消费者都接收这个 queue 的全部消息。

注意:message传递到queue时,主要是Routing Key和Binding Key在起桥梁作用,需要这二者进行匹配才能正常的传递,所以目前存在三种匹配类型(exchange types):完全匹配(Direct)、模式匹配(Topic)、忽略匹配(Fanout)。

Direct:消息路由到那些Routing Key与Binding Key完全匹配的Queue中,比如Routing Key为key1,则只会转发key1的消息;

Topic:exchange会把消息发送到一个或者多个满足通配符规则的routing key的Queue中。其中*表示匹配一个word,#匹配多个word和路径,路径之间通过.隔开。比如满足key.*.1的routing key有key.test.1;满足#.key的routing key有test1.test2.test3.key。

Fanout:忽略匹配,把所有发送到该exchange的消息路由到所有与它绑定的queue中。

图解RabbitMQ的更多相关文章

  1. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  2. RabbitMQ图解

    一.MQ对比 二.RabbitMQ模式 三.队列模式 四.公平分发 五.主题模式

  3. RabbitMQ原理和架构图解(附6大工作模式)

    为什么要使用RabbitMQ? 1.解耦 系统A在代码中直接调用系统B和系统C的代码,如果将来D系统接入,系统A还需要修改代码,过于麻烦. 2.异步 将消息写入消息队列,非必要的业务逻辑以异步的方式运 ...

  4. RabbitMQ 工作图解

    (转网上的图) (原文地址 ,http://www.cnblogs.com/knowledgesea/p/5296008.html)

  5. RabbitMQ原理与相关操作(二)

    接着 上篇随笔 增加几个概念: RabbitMQ是一个在AMQP(高级消息队列协议)标准基础上完整的,可服用的企业消息系统. AMQP模型的功能组件图(上图摘自 Sophia_tj 的 第2章 AMQ ...

  6. RabbitMq 技术文档

    RabbitMq 技术文档 目录 1 AMQP简介 2 AMQP的实现 3 RabbitMQ简介 3.1 概念说明 3.2 消息队列的使用过程 3.3 RabbitMQ的特性 4 RabbitMQ使用 ...

  7. RabbitMQ、Memcache、Redis(队列、缓存)

    RabbitMQ 一.解释 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消 ...

  8. RabbitMQ (五)主题(Topic) -摘自网络

    虽然使用direct类型改良了我们的系统,但是仍然存在一些局限性:它不能够基于多重条件进行路由选择. 在我们的日志系统中,我们有可能希望不仅根据日志的级别而且想根据日志的来源进行订阅.这个概念类似un ...

  9. RabbitMQ (四) 路由选择 (Routing) -摘自网络

    本篇博客我们准备给日志系统添加新的特性,让日志接收者能够订阅部分消息.例如,我们可以仅仅将致命的错误写入日志文件,然而仍然在控制面板上打印出所有的其他类型的日志消息. 1.绑定(Bindings) 在 ...

随机推荐

  1. pyspark数据准备

    鸢尾花数据集 5.1,3.5,1.4,0.2,Iris-setosa 4.9,3.0,1.4,0.2,Iris-setosa 4.7,3.2,1.3,0.2,Iris-setosa 4.6,3.1,1 ...

  2. Golang cpu的使用设置--GOMAXPROCS

    以下测试,使用的Go版本是1.8.3 不设置 如果没有调用runtime.GOMAXPROCS 去设置CPU,Golang默认使用所有的cpu核. 测试机器CPU有4个核,测试代码开启4个gorout ...

  3. python show slave status

    #!/usr/bin/env python import MySQLdbimport contextlib @contextlib.contextmanagerdef mysql(Host,Port, ...

  4. 《LOST》 电视

    还没看正剧,所以转来帮助看电视 从起源到终点:<LOST>剧情全解析(一)   此文是LOST完结之后的剧情解析,剧透,慎入   从起源到终点:<LOST>剧情全解析(一) 转 ...

  5. VS中生成时“sgen.exe”已退出,代码为 1解决办法

    visual studio 2010 选定web项目,右键选择“属性”—“生成”,将“生成序列化程序集”设成“关闭”. 原理分析: sgen是XML序列化程序生成器工具. 可能是这个项目里面有xml序 ...

  6. php源码安装常用配置参数和说明

    常用的配置参数1. --prefix=/usr/local/php 指定 php 安装目录 install architecture-independent files in PREFIX 默认/us ...

  7. DS二叉树--Huffman编码与解码

    题目描述 1.问题描述 给定n个字符及其对应的权值,构造Huffman树,并进行huffman编码和译(解)码. 构造Huffman树时,要求左子树根的权值小于.等于右子树根的权值. 进行Huffma ...

  8. window下sh文件在linux转码

    本文转载自:https://blog.csdn.net/omiconlee/article/details/53407438 1)在Windows下转换: 利用一些编辑器如UltraEdit或Edit ...

  9. 固态硬盘使用简要手册——windows平台

    第一步,请安装它. 第二步,请关闭磁盘整理功能,如图 详细:控制面板--管理工具--任务计划程序 打开界面,设置如下 图1 第三步:预读(Superfetch)和快速搜索(Windows Search ...

  10. xp sql2000 安装SP4失败解决方案

    环境:xp sp3 SQL: sql2000sql2000 SP4下载链接: http://www.microsoft.com/downloads/details.aspx?familyid=8E2D ...