前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AMQP与RabbitMQ笔记

AMQP与RabbitMQ笔记

作者头像
星哥玩云
发布2022-06-29 20:20:17
3490
发布2022-06-29 20:20:17
举报
文章被收录于专栏:开源部署

一、简介

AMQP全称是Advanced MessageQueuing Protocol (高级消息队列协议)。其官方网站在[1]。

AMQP是一个应用层的异步消息传递协议,为面向消息的中间件而设计。其目的是通过协议使应用模块之间或应用程序与中间件等进行充分解耦。而在设计初期,AMQP的原始用途只是为金融界提供一个可以彼此协作的消息协议。现在已经有相当一部分遵循AMQP服务器和客户端供使用。其中RabbitMQ是AMQP的一款开源标准实现。RabbitMQ的官方网站参见[2].

AMQP现在已经成为OASIS的标准之一。

二、概念及技术

1.协议

AMQP的设计理念与数据通信网络中的路由协议有些相似。从应用程序角度,AMQP的应用也是服务器/客户端模式。但是在消息队列中,AMQP通过队列的状态决定生产者(Producer)、消费者(Consumer)之间的连接。

AMQP协议分为三层:ModelLayer,规范服务器和Broker行为;Session Layer定义客户端与服务器端Broker的上下文;Transport Layer传输二进制数据流。

2.Broker模型

AMQP的服务器(Broker)主要由交换器、消息、队列组成(有些文献归类为两项:交换器与消息队列)。Broker的主要功能是消息的路由和缓存。在RabbitMQ中,交换器分为持久交换器、临时交换器、自动删除交换器。对于需要保障可靠性的消息,RabbitMQ可以将消息、队列和交换器的数据写入本地硬盘。而对于响应时间敏感的消息,RabbitMQ可以不配置持久化机制。

交换器(Exchange)接受来自生产者的消息,并根据不同路由算法将消息发送到消息队列。

消息队列(Message Queue)在消息没有被消费者消费时将其缓存,当消费者与消息队列连接时,消息队列会把消息转发给消费者。

消息(Message)是AMQP通信的基本因素。消息由Header和Body组成。与TCP/IP协议类似,Header包含的是各种属性信息,Body是真正传输的数据。

交换器与消息队列的关联通过Binding实现。交换器与多个消息队列Binding后会形成一张“路由表”,其中存储的信息包括消息队列的限制条件既Binding Key。交换器收到消息时会解析其Header中的Routing Key,根据交换类型(Exchange Type)将消息路由到消息队列。流程以RabbitMQ官方的简介为例[4]:

BindingKey由消费者在Binding交换器与消息队列时指定。Routing Key在生产者发送消息时指定。两者的匹配方式由交换类型决定。

交换类型(Exchange Type)分为Direct(单播,又译为直连式),Topic(组播,又译为主题式),Fanout(广播)。对于Direct,Routing Key必须与BindingKey完全一致时匹配才成功;对于Topic,只要Routing Key符合Binding Key指定的模式,既Binding Key可以为一个匹配模式;而对于Fanout,Routing Key和Binding Key不受任何约束。默认情况下交换类型为Direct。

[1] http://www.amqp.org/

[2] http://www.rabbitmq.com/

[3] http://www.amqp.org/product/architecture

[4] http://www.rabbitmq.com/tutorials/amqp-concepts.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档