AMQP即高级消息队列协议,接下来从三个方面来浅析该协议。
一、协议
AMQP协议分层类似于OSI或TCP/IP协议分层。从图中可以看出分三层:
图1 AMQP协议分层图
规范服务器端Broker的行为。
2、Session Layer
定义客户端与服务器端Broker的Context。
3、Transport Layer
传输二进制数据流。
二、模型
AMQP服务器Broker主要由Exchange和Message Queue组成,主要功能是Message的路由Routing和缓存Buffering。
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,流程如下图:
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 及其安装所需要的软件打包都在这里面,主要报卡一下软件:socat-1.7.3.2.tar.gz、rabbitmq-server-3.6.12-1.el6.noarch.rpm、rabbitmq-release-signing-key.asc、otp_...
springboot-rabbitmq-amqp
spring-cloud-config + spring-cloud-bus-amqp实现分布式集群配置动态更新,可更新实例对象,包含源码包+Rabbitmq安装包和安装说明
RabbitMQ源码 rabbitmq-server-generic-unix-3.8.8.tar.xz
rabbitmq安装包,linux离线安装。后面会有教程及配置。先在windows解压再使用。软件名称:rabbitmq-server-generic-unix-3.5.7.tar.gz
rabbitmq-server-3.10.5-1.el8.noarch.rpm
Jemter测试MQ的插件 JMeter-Rabbit-AMQP在github上17年便停止更新了,不支持rabbitmq的交换机类型“x-consistent-hash”,为此我更改了源码使其支持"x-consistent-hash
linux rabbitmq安装包 rabbitmq-server-generic-unix-3.6.1.tar 实测
下载好的包,因为下载太慢 rabbitmq-server-generic-unix-3.7.8.tar.xz
使用JAVA进行运用了RabbitMQ的程序时所需的源码包,此包导入工程之后便可使用。
rabbitmq-server-generic-unix-3.7.18.tar.xz版本服务器安装 有需要的可以去官网查看一下rabbitmq版本对erlang版本的一个支持情况,官网地址:http://www.rabbitmq.com/which-erlang.html
最新版linux rabbitmq-server-generic-unix-3.9.0.tar.xz最新版linux rabbitmq-server-generic-unix-3.9.0.tar.xz
最新版linux rabbitmq-server-generic-unix-3.8.7.tar.xz
rabbitmq-server-3.8.8-1.el7.noarch
rabbitmq-server-3.7.10-1.el7.noarch.rpm包 配合erlang在RHEL Linux 7.x, CentOS 7.x, Fedora 19+ (supports systemd)等系统运行
通过命令 brew install rabbitmq 安装时下载 rabbitmq-server-generic-unix-3.8.3.tar.xz 失败?当前文件可通过放入 ~/Library/Caches/Homebrew/downloads 目录下,再次运行命令即可安装成功!
rabbitmq 源代码(rabbitmq-server-generic-unix-3.8.3.tar),便于开发者资源下载,国外网站下载实在太慢了,下载半天不动!
最新版linux rabbitmq-server-generic-unix-3.9.1.tar.xz最新版linux rabbitmq-server-generic-unix-3.9.1.tar.xz
rabbitmq-server-3.9.7-1.el7.noarch.rpm
rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-3.11.13rabbitmq-server-...