RabbitMQ入门及其几种工作模式
1.简介
MQ全程Message Queue,用于应用程序和应用程序间进行通信。RabbitMQ采用Erlang编写,实现了AMQP(高级消息队列)协议,跨平台,支持各种主流的操作系统和多种客户端。
RabbitMQ相比其他同类型的消息队列,最大的特点在保证可观的单机吞吐量的同时,延时方面非常出色。
2. 相关术语
Broker:通俗讲就是server,接收客户端连接,实现AMQP协议的消息队列和路由功能的进程;
Virtual Host:虚拟主机,类似于权限控制组。一个Virtual Host里可以有若干的Exchange和Queue,但权限控制的最小粒度是Virtual Host;
Producer:消息生产者;
Consumer:消息消费者;
Queue:存储消息的队列容器;
Message:生产者和消费者需要的消息数据;
Connection:一个tcp连接;
Channel:一个管道连接,是tcp连接内的连接(broker),使用现有的TCP连接进行数据传输;
Exchange:交换机,消息路由,生产者发送的消息并不是直接发送到队列中而是先到指定的路由中,然后由路由根据路由key绑定的队列发送到指定队列中;
Binding:建立路由和队列容器的绑定关系;
Routing key:路由key,主要用于寻找队列。
3. Exchange的几种工作模式
1. Direct--路由模式
任何发送到Direct Exchange的消息都会被转发到RouteKey指定的Queue。
这种模式下不需要将Exchange进行任何绑定(binding)操作。
消息传递时需要一个“RouteKey”,可以简单的理解为要发送到的队列名字。
如果vhost中不存在RouteKey中指定的队列名,则该消息会被抛弃。
2. Fanout--发布/订阅模式
任何发送到Fanout Exchange的消息都会被转发到与该Exchange绑定(Binding)的所有Queue上。
这种模式不需要RouteKey。
这种模式需要提前将Exchange与Queue进行绑定,一个Exchange可以绑定多个Queue,一个Queue可以同多个Exchange进行绑定。
如果接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃。
3. Topic--匹配订阅模式
任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue上。
就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。
这种模式需要RouteKey,也许要提前绑定Exchange与Queue。
在进行绑定时,要提供一个该队列关心的主题。
.“#”表示0个或若干个关键字,“*”表示一个关键字。
同样,如果Exchange没有发现能够与RouteKey匹配的Queue,则会抛弃此消息。
4. headers
headers exchange主要通过发送的request message中的header进行匹配,其中匹配规则(x-match)又分为all和any,all代表必须所有的键值对匹配,any代表只要有一个键值对匹配即可。headers exchange的默认匹配规则(x-match)是any。
RabbitMQ工作模式
在 RabbitMQ 官网上提供了 6 中工作模式:简单模式、工作队列模式、发布/订阅模式、路由模式、主题模式 和 RPC 模式。
简单模式和工作队列模式
这两种模式非常简单,只涉及生产者、队列、消费者。
生产者负责生产消息,将消息发送到队列中,消费者监听队列,队列有消息就进行消费。
工作队列模式其实就是有多个消费者的简单模式。
当有多个消费者时,消费者平均消费队列中的消息。
发布/订阅、路由与主题模式
这三种模式就要用到Exchange了。
生产者不直接与队列交互,而是将消息发送到交换机中,再由交换机将消息发送到已绑定改交换机的队列中给消费者消费。
常用的交换机类型有 3 种:fanout、direct、topic。
fanout不处理路由键,很像子网广播,每台子网内的主机都获得了一份复制的消息。
发布/订阅模式就是指使用fanout交换模式。fanout 类型交换机转发消息是最快的。
direct模式处理路由键,需要路由键匹配才能转发。
路由模式使用的是 direct 类型的交换机。
topic:将路由键和某模式进行匹配。
主题模式使用的是 topic 类型的交换机。
RPC 模式
客户端发送一个请求消息然后服务器回复一个响应消息。为了收到一个响应,我们需要发送一个'回调'的请求的队列地址。
RabbitMQ入门及其几种工作模式的更多相关文章
- RabbitMQ 五种工作模式
官网介绍:https://www.rabbitmq.com/getstarted.html 五种工作模式的主要特点 简单模式:一个生产者,一个消费者 work模式:一个生产者,多个消费者,每个消费者获 ...
- rabbitmq的五种工作模式
abbitmq的五种工作模式
- SpringCloudStream学习(二)RabbitMQ中的交换机跟工作模式
知识储备: 交换机: RabbitMQ中有4中交换机,分别是 (FANOUT)扇形交换机: 扇形交换机是最基本的交换机类型,它所能做的事情非常简单---广播消息.扇形交换机会把能接收到的消息全部发 ...
- VMWare提供了三种工作模式上网
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式. 1 ...
- VMWare三种工作模式 :bridge、host-only、nat
VMWare提供了三种工作模式,它们是bridged(桥接模式).NAT(网络地址转换模式)和host-only(主机模式).要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式.这里 ...
- ARM体系的7种工作模式
一.ARM体系的CPU有以下7种工作模式: 用户模式(usr) 大多数程序运行于用户模式 特权模式 系统模式(sys) 运行具有特权的操作系统任务 异常模式 中断模式(irq) ...
- VMWare虚拟机网络的三种工作模式
VMWare提供了三种工作模式: 1.bridged(桥接模式) 在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器.在桥接模式下,需要手工为虚拟系 ...
- SPI总线的4种工作模式
spi总线的4种工作模式 0 to 4 modes SPI接口的全称是"Serial Peripheral Interface",意为串行外围接口,是Motorola首先在其MC6 ...
- Intel系列微处理器的三种工作模式
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
随机推荐
- 拉丁方阵问题 -- python实现
问题描述 拉丁方阵是一种n×n的方阵,方阵中恰有n种不同的元素,每种元素恰有n个,而且每种元素在一行和一列中 恰好出现一次.著名数学家和物理学家欧拉使用拉丁字母来作为拉丁方阵里元素的符号,拉丁方阵因此 ...
- 性能调优 -- TPS&QPS
无论在工作中,还是看一些技术文章的时候,经常听到TPS.QPS这两个术语,那么两者分别是什么?又有哪些区别? QPS:query per second,是指单位时间内请求的数量. TPS:表示一个事务 ...
- Redis内存数据库在Exchange会议室的整体应用架构
注:本文是别人写的,感觉写得很好就转过来,版权归原作者所有哦,谁知道出处可以告诉我,谢谢. 根据以上的会议室应用现状分析,该架构的核心是把历史发生的会议室申请数据定时同步到Redis内存数据库中,对于 ...
- MATLAB聚类有效性评价指标(外部 成对度量)
MATLAB聚类有效性评价指标(外部 成对度量) 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 更多内容,请看:MATLAB: Clustering ...
- 「Shimo使用指南」mac支持pptp协议的小软件
Mac的好多小伙伴在访问网络设备时觉得远程连接不方便,例如ssh,***登陆都不是很方便,后来又安装了open*** forMac.ISSH等客户端,使用后发现不是很稳定,断线后很久都无法连接等缺点, ...
- CALL和RET指令实验
实验10 1.在屏幕8行3列,用绿色显示data段中的字符串 assume cs:code data segment db data ends code segment start: ;行 ;列 ;颜 ...
- 前端小白webpack学习(一)
俗话说得好,好记性不如烂笔头. 之前就在学习中看过webpack的教程,然而一段时间没用,火速的忘光了.写这篇博文,做个总结,也让自己以后有个地方回顾. 看webpack之前,我先去看了一下官方文档, ...
- 分布式文件服务器FastDFS的使用
分布式项目中涉及到的文件上传与下载,此时使用之前的上传方式,将上传的文件与当前项目所在服务器放在同一个位置,显然不符合分布式项目的理念,此时我们借助FastDFS将上传的文件数据存储到单纯的一个服务器 ...
- SpringBoot与数据层
1.JDBC <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- 对numpy.meshgrid()理解
一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...