RabbitMQ学习笔记:核心概念和AMQP协议

1 & 什么是AMQP高级消息队列协议?

  • AMQP全称:Advanced Message Queuing Protocol(翻译:高级消息队列协议);
  • AMQP定义:
  1. 是具有现代特征的二进制协议;
  2. 是一个提供统一消息服务的应用层标准高级消息队列协议;
  3. 是应用层协议的一个开放标准,为面向消息的中间件设计;
  • AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
  • AMQP协议模型:
  1. 生产者应用服务端 =》将消息扔到server端(rabbitmq的节点)上,Virtual host虚拟主机,其实就是一个上层路由逻辑的概念,Exchange也就是更上一级的AMQP协议的核心;生产者将消息投递到Server的Exchange交换机上。(消息投递要经过服务连接用户名,密码,ip地址 再经过虚拟主机Virtual host,最后投递到具体的Exchange)。
  2. 消费者应用服务端 =》监听Message Queue(消息队列);Binding => Exchange 和 Message Queue(MQ)又有一个绑定关系,MQ是具体消息的载体;

生产者将消息投递到交换机上,一个交换机可以绑定多个消息队列,交换机有一个路由策略,指定两个属性:
1、消息发送哪个exchange;
2、消息带上路由key,exchange和队列Binding绑定关系,通过路由key将消息路由到指定队列上,发送给消费者; 

AMQP在消息提供者和客户端的行为进行了强制规定,使得不同卖商之间真正实现了互操作能力。
JMS是早期消息中间件进行标准化的一个尝试,它仅仅是在API级进行了规范,离创建互操作能力还差很远。
与JMS不同,AMQP是一个Wire级的协议,它描述了在网络上传输的数据的格式,以字节为流。因此任何遵守此数据格式的工具,其创建和解释消息,都能与其他兼容工具进行互操作。

AMQP规范的版本:
0-8        是2006年6月发布
0-9        于2006年12月发布
0-9-1     于2008年11月发布
0-10      于2009年下半年发布
1.0 draft  (文档还是草案)

 

2 & AMQP协议实现有哪些?

1)OpenAMQ 【http://freshmeat.sourceforge.net/projects/openamq

AMQP的开源实现,用C语言编写,运行于Linux、AIX、Solaris、Windows、OpenVMS。

2)Apache Qpid 【https://qpid.apache.org/

Apache的开源项目,支持C++、Ruby、Java、JMS、Python和.NET。

3)Redhat Enterprise MRG 【https://access.redhat.com/documentation/en-us/red_hat_enterprise_mrg/3/

实现了AMQP的最新版本0-10,提供了丰富的特征集,比如完全管理、联合、Active-Active集群,有Web控制台,还有许多企业级特征,客户端支持C++、Ruby、Java、JMS、Python和.NET。

4)RabbitMQ https://www.rabbitmq.com/documentation.html

一个独立的开源实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。

支持的系统和平台/Operating Systems and Platforms

5)AMQP Infrastructure 【https://fedoraproject.org/wiki/Features/AMQP_Infrastructure

Linux下,包括Broker、管理工具、Agent和客户端。

6)ØMQ 【https://zeromq.org/

一个高性能的消息平台,在分布式消息网络可作为兼容AMQP的Broker节点,绑定了多种语言,包括Python、C、C++、Lisp、Ruby等。

7)Zyre 【】

是一个Broker,实现了RestMS协议和AMQP协议,提供了RESTful HTTP访问网络AMQP的能力。

基于AMQP协议实现了7种消息中间间,业界选择RabbitMQ的比较多,其中的优劣就不在赘述,我们这个系列的学习重点是RabbitMQ,在开始介绍之前,我们先来理解一下AMQP协议。

 

3 & AMQP核心概念是什么?

  • Publisher:消息生产者,即投递消息的程序;
  • Connection:publisher/consumer 和 broker 之间的 TCP 连接。断开连接的操作只会在client端进行,broker 不会断开连接,除非出现网络故障或 broker 服务出现问题;
  • Server:又称 Broker,接受客户端的连接,实现 AMQP 实体服务(接收和分发消息的应用,RabbitMQ Server 就是 Message Broker);
  • Channel:网络通信,几乎所有的操作都在 channel 中进行,channel 是进行消息读写的通道(消息流转,清空消息,添加用户等),客户端可建立多个 channel,每个 channel 代表一个会话任务(拿到连接,创建 channel);如果每一次访问 RabbitMQ 都建立一个 connection,在消息量大的时候建立 TCP connection 的开销将是巨大的,效率也较低。channel 是在 connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。channel 作为轻量级的 connection,极大减少了操作系统建立 TCP connection 的开销;
  • Message:消息,服务器和应用程序之间传送的数据,由 Properties 和 Body 组成。Properties 可以对消息进行修饰,比如消息的优先级、延迟投递等高级特性,Body 则是消息体内容;
  • Exchange:交换机,接收消息,message 到达 broker 的第一站,根据分发规则,匹配查询表中路由键(routing key)转发消息到绑定的队列(Queue)上;常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
  • Binding:绑定,Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 exchange 中的查询表中,用于message 的分发依据,作用就是把 Exchange 和 Queue 按照路由规则绑定起来;
  • Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息;
  • Queue:消息的载体,也称为 Message Queue(消息队列),消息最终被送到这里等待 consumer(消费者)取走。一个 message 可以被同时拷贝到一个或多个 queue 中(比如:topic、fanout 类型);
  • Consumer:消息消费者,即接收消息的程序;

 

【参考文章】

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChaITSimpleLove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值