高级消息队列协议(AMQP)演练
介绍
与封闭源代码应用程序相比,开源应用程序是免费的、相对较快的,并且具有强大的开发周期以及现成的社区支持。 这使得它们成为许多开发人员、产品经理和一般用户在做出长期选择时非常强大的替代品。
为社区开发的应用程序提供成功的关键要素之一(即 有很多人在一个或多个互通项目上工作)在持续开发过程中通常是一致的——使应用程序可用的主要是它们能够 相互交谈 并一起工作。
在这篇 DigitalOcean 文章中,我们将尝试一些新的东西并帮助开发人员(以及任何其他感兴趣的人)彻底熟悉 高级消息队列协议 。 它是一个开放的[技术]标准(a common ground),旨在允许开发应用程序,这些应用程序被定制为在不同进程、应用程序甚至需要与之通信的不相关系统之间传递消息的中间件互相传递信息。
什么是技术标准和开放标准?
技术标准
技术标准包括规则、规范、定义等。 用于开发和使用为它们提供动力的应用程序和其他技术系统。 它们由定义明确的方法和过程组成,充当理论框架。
开放标准
在技术系统领域,开放标准是可以调整和使用的指令 - 免版税 - 用于应用程序的实施和开发。 根据开发它们的机构,可以由“开放机构”通过“开放流程”创建和维护开放标准。
什么是开放系统互连?
开放系统互连 (OSI) 是一种 ISO(国际标准化组织)标准,它于 1970 年代开发,旨在“同质化”不同网络的方式——因此计算机系统通过它们进行通信——协同工作。
本标准构成一个框架(即 开发的基础)创建以在七个连续层中实现通信协议:
- Physical Layer - 形成物理层(即 硬件)OSI 工作的基础。
- 数据链路层 - 在网络[节点]之间传输数据。
- 网络层 - 引导流量(即 转发)的地方。
- 传输层 - 用于确保可靠性、数据流(即 速率)控制及其流。
- 会话层 - 负责管理应用程序之间的会话。
- Presentation (Syntax) Layer - 塑造和呈现要处理的数据。
- 应用层 - 设置和确保共同点 - 到达应用程序 - 进行通信。 (这就是 AMQP 所在的地方!)
什么是应用层?
应用层——AMQP 所在的层——是构成开放系统互连标准的上述部分之一。 如果我们要详细说明,应用层可以被认为是[唯一]用户与之交互的层,并且定义了进程到进程(或应用程序到应用程序)通信如何发生。
应用层的一些 [common] 示例(AMQP 除外)将是:
- 国税局
- 域名系统
- FTP
- 地图
- SSH
- 和更多。
什么是通信协议?
每个通信协议都由明确定义的规则和法规组成,以形成不同应用程序之间使用的共享语言,最终结果是能够进行通信,而不管它们最初如何工作。
这些协议具有数据格式、使用协议的各方定义、路由和流量(速率)控制等元素。
什么是高级消息队列协议?
高级消息队列协议 (AMQP) 创建客户端和代理之间的互操作性(即 消息中间件)。 它的创建目标是使各种不同的应用程序和系统能够一起工作,而不管它们的内部设计如何,从而在工业规模上标准化企业消息传递。
AMQP 包括对网络发生方式和消息代理应用程序工作方式的定义。 这意味着以下规格:
- 使用消息代理进行消息路由和存储的操作以及定义所涉及组件如何工作的规则集
- 以及用于实现客户端和执行上述操作的代理之间的通信如何工作的有线协议
AMQP创建和使用的原因
在 AMQP 之前,曾经有不同的消息代理和传输应用程序由不同的供应商创建和使用。 然而,他们有一个大问题,那就是缺乏互操作性。 根本没有办法让一个人与另一个人一起工作。 可以用来让使用不同协议的不同系统工作的唯一方法是引入一个额外的层来转换消息,称为 消息传递桥 。 这些系统使用单独的适配器能够像普通客户端一样接收消息,将用于连接多个不同的消息传递系统(例如 WebSphere MQ 和另一个)。
AMQP 通过提供我们上面解释的明确定义的规则和指令,创建了一个通用基础,可用于所有消息队列和代理应用程序的工作和互操作。
什么是 AMQP 用例?
每当需要在应用程序和进程之间进行高质量和安全的消息传递时,都可以考虑使用 AMQP 实现消息代理解决方案。
AMQP 确保
- 消息传递的可靠性
- 快速、可靠地传递信息
- 消息确认
这些功能使其非常适合
- 监控和全球共享更新
- 连接不同的系统以相互交谈
- 允许服务器快速响应即时请求并将耗时的任务委派给以后处理
- 将消息分发给多个收件人以供使用
- 允许离线客户端稍后获取数据
- 为系统引入完全异步功能
- 提高应用程序部署的可靠性和正常运行时间
AMQP 组装和术语
理解和使用 AMQP 需要熟悉很多不同的术语和术语。 在本节中,我们将介绍这些关键部分:
- 代理(服务器): 一个应用程序 - 实现 AMQP 模型 - 接受来自客户端的连接以进行消息路由、排队等。
- Message: 传输/路由的数据内容,包括有效负载和消息属性等信息。
- Consumer: 从队列接收消息(由生产者放置)的应用程序。
- Producer: 通过交换将消息放入队列的应用程序。
注意: 消息的负载不是由 AMQP 定义的; 因此,可以使用该协议传输各种不同类型的数据。
主要 AMQP 组件
AMQP 模型定义了如何接收、路由、存储、排队消息以及处理这些任务的应用程序部分如何工作,这依赖于以下组件的明确集合定义:
- Exchange: 经纪人的一部分(即 服务器),它接收消息并将它们路由到 队列
- Queue(消息队列): 一个命名实体,消息与之关联,消费者从哪里接收消息
- Bindings: 将消息从交换机分发到队列的规则
AMQP 消息代理如何工作?
在 AMQP 中,“消息代理”转换为接收实际消息和路由的应用程序(即 转移)给相关方。
APPLICATION EXCHANGE TASK LIST WORKER [DATA] -------> [DATA] ---> [D]+[D][D][D] ---> [DATA] Publisher EXCHANGE Queue Consumer
AMQP 交易所如何运作?
收到发布者的消息后(即 客户端),交易所处理它们并将它们路由到一个或多个队列。 执行的路由类型取决于交换的类型,目前有四种。
直接交换
直接交换类型涉及基于路由键将消息传递到队列。 路由键可以被认为是定义的附加数据,用于设置消息的去向。
直接交换的典型用例是工作人员之间以循环方式执行负载平衡任务。
扇出交换
扇出交换完全忽略路由键并将任何消息发送到绑定到它的所有队列。
扇出交换的用例通常涉及将消息分发给多个客户端,其目的类似于通知:
- 消息共享(例如 聊天服务器)和更新(例如 消息)
- 应用程序状态(例如 配置)
话题交流
主题交换主要用于发布/订阅(发布-订阅)模式。 使用这种类型的传输,使用路由键以及将队列绑定到交换器来匹配和发送消息。
每当需要消费者的专门参与时(例如执行某种类型的操作的单个工作集),主题交换就会派上用场,以便根据键和模式相应地分发消息。
标头交换
标头交换构成使用附加标头(即 消息属性)与消息相结合,而不是依赖于路由键来路由到队列。
能够使用字符串以外的数据类型(路由键是什么),标头交换允许不同的路由机制具有更多可能性,但类似于通过键直接交换。
AMQP 消息代理与电子邮件有何不同?
鉴于邮寄包括发送消息(即 发布),由邮件服务器接收和处理(即 代理)到相关邮箱(即 queues) 最后请求并获取该消息(即 消费),AMQP定义的传输消息的过程和任务可以看成是类似的。
除了基本原理实际上有很大不同之外,将 AMQP 与电子邮件区分开来的主要因素是目标服务质量 (QoS)。 AMQP 就其本质而言,力求实现可靠性、安全性、标准合规性和安全性。
诸如持久性、向多个消费者传递消息、确保和防止多次消费的可能性以及高速运行的协议等特性是区分两者的主要因素。
对于业务级的使用和适配,发送消息的认证要求(即 发布)到交换(和队列)意味着防止不需要的(如垃圾邮件),对建立 QoS 起着关键作用。