RabbitMQ 使用的AMQP模型解析
RabbitMQ 是采用AMQP协议进行通信的。比起简单的TCP/UDP之类的通信,该模型更为复杂,功能也更为强大。
最近项目中用到RabbitMQ比较多,就比较系统深入的过来看看它的具体方式。
内容基本上从官网文档借鉴。
在这个模型中,publisher将消息首先发布给Exchange,由Exchange负责发送到一个或多个Queue中,发送的规则称为binging。最后发送给consumer或者consumer来pull。感觉这个概念就像寄送快递,发件人只需要和快递员打交道,告诉要发什么地址,甚至多个地址。派送则由快递公司承担。最后用户既可以选择送货上门,也可以选择自己去取件。
为了保证传递的可靠性,AMQP中有一个确认机制。consumer在收到快递后,要签个字,快递公司才会把订单从系统中撤掉。
如果消息无法送抵,则可以回退给publisher,或者扔掉,或者放入旧货堆(dead letter queue)
exchange:
Exchange作为AMQP中重要的一个中间实体,其交换类型(exchange type), 共有以下4种:
Direct, Fanout, Topic, Headers
除了类型外,还有一些关键的属性:
Name, Durability, Auto-delete, Arguments.
针对每种类型的具体解释如下:
Default Exchange:
default exchange是一种直接交换,所使用的exchange是不需要命名的默认exchange(empty string)。它有一个特别之处是在每个queue生成的时候会自动帮定到一个同名的routing key上。这样从默认exchange上出来的消息就可以根据这个routing key自动找到对应的queue。从外界看来,好像exchange不存在,publisher直接将消息写入了queue中。
Fanout Exchange:
fanout exchange 会忽略routing key的作用,向所有与其绑定的queue发送消息。当一条消息从publisher发布到exchange之后,exchange会负责到所有的N个queue中。这是用来做广播的理想方式。
Topic Exchange:
topic exchange会分发消息到一个或多个queue上,这取决于routing key和pattern的设置,只有相符合的消息才会被传到queue上。这个模式常用来做多播和订阅模式。
Headers Exchange:
headers exchange 在分发消息的时候,不依赖于routing key的规则,而是直接根据消息的headers attribute.每个queue可以指定一个或多个header,也可以指定是指需要满足一个header还是要所有的header都满足才算是匹配成功。
队列
队列(Queue)也是AMQP中重要的组成部分。它也有一些重要的属性:
Name
Durable(持久化)
Exclusive(只被用于一条连接,连接关闭后自动删除)
Auto-delete(最后一个consumer退订后自动删除)
Arguments
队列在使用之前要先被声明,如果声明一个已存在的队列,则看声明时用到的参数是否一致,不一致时报406错。
用户可以用255位之内的UTF-8字符命名队列,也可以让broker生成一个唯一的名称(在定义时传入空名字),之后使用的时候只要输入空字符串,会自动匹配到这个唯一的名字上。
绑定
在AMQP中,绑定是用来判定exchange向那些队列传递消息的规则。绑定可能会用到一个叫做routing key的属性,这个属性用来订制选择的规则,类似于一个filter的工作方式。
消费者(consumer)
在AMQP中,消费者有两种消费模式:Push和Pull。
在Push方式下,消费者订阅某一个队列,队列的消息就被推送来。
对于消息回执,有两种选择,一种由消费者主动发送回执或者broker自动发送。
RabbitMQ 使用的AMQP模型解析相关推荐
- 理解RabbitMQ中的AMQP模型,知乎上已获万赞
前言 在实际开发,Redis使用会频繁,那么在使用过程中我们该如何正确抉择数据类型呢?哪些场景下适用哪些数据类型.而且在面试中也很常会被面试官问到Redis数据结构方面的问题: Redis为什么快呢? ...
- RabbitMQ简介以及AMQP协议
RabbitMQ能为你做些什么? 消息系统允许软件.应用相互连接和扩展.这些应用可以相互链接起来组成一个更大的应用,或者将用户设备和数据进行连接.消息系统通过将消息的发送和接收分离来实现应用程序的异步 ...
- RabbitMQ(03)——RabbitMQ的Fanout消息模型
RabbitMQ--RabbitMQ的Fanout消息模型 Fanout消息模型结构 P:生产者,向Exchange发送消息 X: Exchange(交换机),接收生产者的消息 C:消费者,领取消息并 ...
- Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测
Python基于statsmodels包构建多元线性回归模型:模型构建.模型解析.模型推理预测 目录
- 旧文重发:做人、做事,做架构师——架构师能力模型解析
这篇文章发表于<程序员>2008.04期.其中有关模型图参见: http://blog.csdn.net/aimingoo/archive/2007/06/26/1667508.aspx ...
- RabbitMQ支持的消息模型
一.rabbitMQ支持的消息模型如下 第一种模型(直连) 在上图的模型中,有以下概念: P:生产者,也就是要发送消息的程序 C:消费者:消息的接受者,会一直等待消息到来. queue:消息队列,图中 ...
- Qt Creator使用Clang代码模型解析C ++文件
Qt Creator使用Clang代码模型解析C ++文件 使用Clang代码模型解析C ++文件 关于Clang代码模型 配置C语代码模型 lang检查 在项目级别指定Clang代码模型设置 使用编 ...
- 模型解析之独立顶点的筛选
1.模型需求 存储三维模型的文件,通常需要更高效的空间分配,来尽量减少文件的物理体积. 例如一个模型,可能存有position,uv,normal,tangents ... 等等相关信息. 如果简单的 ...
- Kubernetes应用部署模型解析(原理篇)
2019独角兽企业重金招聘Python工程师标准>>> Kubernetes应用部署模型解析(原理篇) 博客分类: Kubernetes [编者按]Kubernetes可用来管理Li ...
- 3D姿态估计——ThreeDPose项目简单易用的模型解析
前言 之前写过tensorflow官方的posenet模型解析,用起来比较简单,但是缺点是只有2D关键点,本着易用性的原则,当然要再来个简单易用的3D姿态估计.偶然看见了ThreeDPose的项目,感 ...
最新文章
- 精通八大排序算法系列:二、堆排序算法
- 关于Unity中的刚体和碰撞器的相关用法(一)
- Linux安装PHP报错Sorry, I cannot run apxs. Possible reasons follow:
- IEDA中彻底删除项目
- SpringFramework4系列之SpringJMS:(一)搭建JMS-注解加XML版
- P4899-[IOI2018]werewolf 狼人【Kruskal重构树,主席树】
- 架构师2月刊发布:解读Android、高效运维、API设计方法论
- java做类似于qq空间动态加载_实现类似微博、QQ空间等的动态加载
- 体检结果(2018年10月,胃肠镜)
- 焦仲卿刺杀孙策_惊闻:孙伯符死于焦仲卿之手。。。
- 电子签名,后疫情时代“智慧校园”创新新方向
- 对接环信踩坑记(环信客服+IMSDk即时通信)
- 什么是语法糖(Syntactic sugar)?
- fwr310刷openwrt_全网首拆迅捷FWR310 V4.0 300M 路由硬改后刷华硕N14U
- 计算机专业该不该考研?
- (windows图形化界)粘滞键后门
- gpio驱动重构版,未优化,附上测试demo
- 开源规则引擎 drools
- 滑块验证码后台生成及校验
- 六顶思考帽(一)-----白色