`

RabbitMQ源码解析前奏--AMQP协议

阅读更多

 AMQP即高级消息队列协议,接下来从三个方面来浅析该协议。
一、协议
    AMQP协议分层类似于OSI或TCP/IP协议分层。从图中可以看出分三层:


图1 AMQP协议分层图
1、Model Layer
    规范服务器端Broker的行为。
2、Session Layer
    定义客户端与服务器端Broker的Context。
3、Transport Layer
    传输二进制数据流。


二、模型
    AMQP服务器Broker主要由Exchange和Message Queue组成,主要功能是Message的路由Routing和缓存Buffering。


图2 AMPQ服务器模型图
 

    Exchange接受Producer发送的Message并根据不同路由算法将Message发送到Message Queue。
    Message Queue会在Message不能被正常消费时将其缓存起来,但是当Consumer与Message Queue之间的连接通畅时,Message Queue将Message转发给Consumer。
    Message由Header和Body组成,Header是由Producer添加的各种属性的集合,包括Message是否客被缓存、由哪个Message Queue接受、优先级是多少等。而Body是真正需要传输的APP数据。
    Exchange与Message Queue之间的关联通过Binding来实现。Exchange在与多个Message Queue发生Binding后会生成一张路由表,路由表中存储着Message Queue所需消息的限制条件即Binding Key。当Exchange收到Message时会解析其Header得到Routing Key,Exchange根据Routing Key与Exchange Type将Message路由到Message Queue,流程如下图:


图3 Messag处理流程图

    Binding Key由Consumer在Binding Exchange与Message Queue时指定,而Routing Key由Producer发送Message时指定,两者的匹配方式由Exchange Type决定。
    Exchange Type分为Direct(单播)、Topic(组播)、Fanout(广播)。当为Direct(单播)时,Routing Key必须与Binding Key相等时才能匹配成功,当为Topic(组播)时,Routing Key与Binding Key符合一种模式关系即算匹配成功,当为Fanout(广播)时,不受限制。默认Exchange Type是Direct(单播)。
    Virtual Host是个虚拟概念,可以持有一些Exchange和Message Queue。一个Virtual Host可以是一台服务器,也可以是由多台服务器组成的集群。Exchange和Message Queue可以分别部署在一台或者多台服务器上。

三、通信
    在AMQP中,Client通过与Broker之间建立Connection来通信,而Connection建立在Client与Virtual Host之间。而在每个Connection上可以运行多个Channel,每个Channel执行与Broker的通信,Session依附于Channel之上。Channel是Client与Broker之间传输Message的实体。在通信的时候,会为每个Command分配一个唯一的标示符即UUID,用于Command做校验和重传。
    Client默认使用guest/guest访问权限和访问虚拟主机的根目录,这些默认项也是RabbitMQ的默认安装选项。

 

http://blog.chinaunix.net/uid-22312037-id-3458208.html

分享到:
评论

相关推荐

    RabbitMQ rabbitmq-server-3.6.12-1.el6.noarch 及其安装所需要的软件打包

    RabbitMQ rabbitmq-server-3.6.12-1.el6.noarch 及其安装所需要的软件打包都在这里面,主要报卡一下软件:socat-1.7.3.2.tar.gz、rabbitmq-server-3.6.12-1.el6.noarch.rpm、rabbitmq-release-signing-key.asc、otp_...

    rabbitmq-c-master.rar_RabbitMQ c lib_cmake编译_rabbitmq_rabbitmq-c

    在使用`rabbitmq-c`时,开发者需要理解AMQP协议的基础知识,包括交换机、队列、绑定和消息路由策略。同时,熟悉C编程和错误处理技巧也是必要的,因为`rabbitmq-c`的API是C语言风格的,需要手动管理内存和错误检查。 ...

    Jemter JMeter-Rabbit-AMQP插件升级版,支持rabbitmq交换机类型“x-consistent-hash”

    Jemter测试MQ的插件 JMeter-Rabbit-AMQP在github上17年便停止更新了,不支持rabbitmq的交换机类型“x-consistent-hash”,为此我更改了源码使其支持"x-consistent-hash

    rabbitmq-server-generic-unix-3.5.7.tar.rar下载,rabbitmq安装包

    RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议实现,广泛应用于分布式系统中,用于处理异步任务、消息通信和数据交换。它由Erlang编程语言编写,具备高可用性、可扩展性和...

    rabbitmq-server-generic-unix-3.8.8.tar.xz

    RabbitMQ源码 rabbitmq-server-generic-unix-3.8.8.tar.xz

    springboot-rabbitmq-amqp

    SpringBoot与RabbitMQ结合使用AMQP协议是现代企业级应用程序中常见的消息中间件解决方案。本文将深入探讨SpringBoot如何集成RabbitMQ以及AMQP协议的基础知识,旨在帮助开发者理解和应用这一技术栈。 首先,...

    rabbitmq-server-mac-standalone-3.5.7.tar.gz

    RabbitMQ基于AMQP(Advanced Message Queuing Protocol)协议,它提供了一种标准的方式来发送和接收消息。消息在生产者(发布者)和消费者之间通过队列进行中转,确保即使在系统间通信不稳定时也能可靠地传递数据。...

    JMeter-Rabbit-AMQP.rar

    标题中的“JMeter-Rabbit-AMQP.rar”表明这是一个与JMeter、RabbitMQ和AMQP相关的压缩包文件。RabbitMQ是基于AMQP(Advanced Message Queuing Protocol)的开源消息代理,常用于构建分布式系统中的可靠消息传递。...

    jmeter测试rabbitmq资源包

    jmeter测试rabbitmq资源包,导入即用,亲测有效 导入目录:apache-jmeter-5.1.1\lib\ext 包括: ApacheJMeter-rabbitmq amqp-client-5.2.0 apache-jmeter-5.1.1(5.4.1 也可用)

    rabbitmq-server-generic-unix-2.7.0.tar.gz

    1. **解压文件**:在终端中,使用`tar -xzvf rabbitmq-server-generic-unix-2.7.0.tar.gz`命令解压缩文件,这将生成一个名为rabbitmq_server-2.7.0的目录。 2. **切换目录**:进入解压后的目录,例如`cd rabbitmq_...

    rabbitmq-server-mac-standalone-3.5.3

    它基于AMQP(Advanced Message Queuing Protocol)协议,提供高可用性、可靠性和可扩展性。在这个场景中,我们关注的是RabbitMQ在Mac操作系统上的安装过程。 首先,我们需要了解的是`rabbitmq-server-mac-...

    RabbitMQ-c源码

    - **AMQP协议**: RabbitMQ-c实现了AMQP协议的客户端部分,包括连接、频道、交换机、队列、消息等概念的API接口。 - **网络通信**: 库使用OpenSSL库提供安全的TCP连接,支持TLS/SSL加密。 - **线程安全**: ...

    rabbitmq-server-generic-unix-3.6.16.tar.xz和安装说明

    rabbitmq-server-generic-unix-3.6.16.tar.xz,国外网站下载实在太慢了,便于开发者资源下载。另附otp_src_18.3.tar.gz文件和rabbitmq详细安装步骤。

    rabbitmq-server-windows-3.6.10.zip

    它基于AMQP(Advanced Message Queuing Protocol)协议,提供高可用性、可扩展性和可靠性的消息服务。在Windows环境下,RabbitMQ的安装通常通过下载对应的zip文件进行,例如"rabbitmq-server-windows-3.6.10.zip"。 ...

    最新版windows rabbitmq-server-3.8.5.zip

    2. **安装与配置**:`rabbitmq-server-3.8.5.exe`是RabbitMQ Windows版的安装程序,用户可以通过这个可执行文件进行安装。安装过程中会涉及服务启动设置、端口配置(默认5672用于AMQP,15672用于管理界面)、环境...

    最新版linux rabbitmq-server-generic-unix-3.8.5.tar.xz

    最新版linux rabbitmq-server-generic-unix-3.8.5.tar.xz

    最新版linux rabbitmq-server-generic-unix-3.8.14.tar.xz

    最新版linux rabbitmq-server-generic-unix-3.8.14.tar.xz最新版linux rabbitmq-server-generic-unix-3.8.14.tar.xz

    rabbitmq-server-3.10.5-1.el8.noarch.rpm

    rabbitmq-server-3.10.5-1.el8.noarch.rpm

    rabbitmq-server-3.8.13-1.el7.noarch.rpm

    rabbitmq-server-3.8.13-1.el7.noarch.rpm

    rabbitmq-server-generic-unix-3.8.3.tar.xz 离线包

    通过命令 brew install rabbitmq 安装时下载 rabbitmq-server-generic-unix-3.8.3.tar.xz 失败?当前文件可通过放入 ~/Library/Caches/Homebrew/downloads 目录下,再次运行命令即可安装成功!

Global site tag (gtag.js) - Google Analytics