引言

与封闭源代码的应用程序相比,开放源代码应用程序是免费的,速度相对较快,并且具有强大的开发周期和随时可用的社区支持。 这使得他们成为许多开发人员、产品经理和普通用户在做出长期选择时的强有力的替代品。

在持续开发过程中,人们普遍认为,社区开发的应用程序取得成功的关键因素之一(即有许多人在一个或多个互通项目上工作)——使应用程序可用的主要因素是它们相互交流和协同工作的能力。

在这篇 DigitalOcean 文章中,我们将尝试一些新的东西,帮助开发人员(以及其他感兴趣的人)彻底熟悉高级消息排队协议。 它是一个开放的[技术]标准(公共基础) ,旨在允许开发应用程序,这些应用程序被裁剪成中间件,用于在不同进程、应用程序甚至不相关的系统之间代理消息,这些系统需要相互通信并传递消息。

什么是技术标准和开放标准?

技术标准

技术标准包括用于应用程序开发和使用的规则、规范、定义等以及支持它们的其他技术系统。 它们由定义明确的方法和过程组成,作为理论框架。

开放标准

在技术系统领域,开放标准是指可以调整和使用的指令——免版税——用于实施和开发应用程序。 根据开发它们的机构的不同,开放标准可以由一个“开放机构”通过一个“开放过程”来创建和维护。

什么是开放系统互连?

开放系统互连(OSI)是国际标准化组织(ISO)于1970年代制定的标准,目的是使不同的网络以及通过它们进行通信的计算机系统协同工作的方式“同质化”。

这个标准构成了一个框架(即开发基础) ,这个框架是为了在七个连续的层中实现通信协议而创建的:

  1. 物理层——形成 OSI 工作的物理(即硬件)基础。
  2. 数据链路层——在网络[节点]之间传输数据。
  3. 网络层-指挥交通(即转发)之间的地方。
  4. 传输层-确保可靠性、数据流(即速率)控制及其流。
  5. 会话层——负责管理应用程序之间的会话。
  6. 表示(语法)层——对要处理的数据进行形状和表示。
  7. 应用层-设置和确保共同点-到达应用程序-为通信。 (AMQP 就住在这里!)

什么是应用层?

应用层(AMQP 所在的层)是构成开放系统互连标准的上述部分之一。 如果我们要详细说明的话,应用程序层可以被认为是用户交互的[唯一]层,也是定义进程到进程(或应用程序到应用程序)通信如何发生的层。

除了 AMQP 以外,应用层的一些[常见]示例包括:

  • 国际互联网研究中心
  • Dns
  • Ftp
  • Imap
  • 还有更多。

什么是通信协议?

每个通信协议都由明确定义的规则和条例组成,以形成不同应用程序之间的共同语言,最终能够进行通信,而不管它们最初是如何设置工作的。

这些协议具有诸如数据格式、使用协议的各方的定义、路由和流量(速率)控制等元素。

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

高级消息队列协议消息中间件(AMQP)创建客户端和经纪人之间的互操作性(即消息中间件)。 它的创建目标是使各种不同的应用程序和系统能够一起工作,不管它们的内部设计如何,在工业规模上实现企业信息标准化。

Amqp 包括网络发生方式和消息代理应用程序工作方式的定义。 这意味着:

  • 使用消息代理进行消息的路由和存储操作,并使用一组规则定义组件的工作方式
  • 以及一个用于实现客户和执行上述操作的经纪人之间通信工作方式的有线协议

Amqp 创建和使用的原因

在 AMQP 之前,有不同的消息代理和传输由不同供应商创建和设置的应用程序。 然而,他们有一个大问题,那就是缺乏互操作性。 根本没有一种方式可以让一个人与另一个人合作。 唯一可用于使用不同协议的不同系统工作的方法是通过引入一个额外的层来转换称为消息桥的消息。 这些系统使用单独的适配器能够像普通客户机那样接收消息,将用于连接多个不同的消息传递系统(例如 WebSphere MQ 和另一个)。

Amqp 通过提供我们上面解释过的明确定义的规则和指令,创建了一个可用于所有消息队列和代理应用程序工作和互操作的共同基础。

什么是 AMQP 用例?

只要需要在应用程序和流程之间高质量和安全地传递消息,就可以考虑使用 AMQP 实现的消息代理解决方案。

Amqp 确保

  • 消息传递的可靠性
  • 快速并确保消息的传递
  • 信息确认

这些能力使它成为理想的

  • 监控和全球共享更新
  • 将不同的系统连接起来彼此对话
  • 允许服务器快速响应即时请求,并将耗时的任务委派给后续处理
  • 将邮件分发给多个收件人以供使用
  • 允许脱机客户端以后获取数据
  • 为系统引入完全异步的功能
  • 提高应用程序部署的可靠性和正常运行时间

组装和术语

理解和使用 AMQP 需要熟悉相当多不同的术语和术语。 在本节中,我们将重温这些关键部分:

  • 代理(服务器) : 实现 AMQP 模型的应用程序,它接受来自客户端的连接进行消息路由、排队等。
  • 消息: 传输 / 路由的数据内容,包括有效载荷和消息属性等信息。
  • Consumer: 从队列中接收消息(由生产者放置)的应用程序。
  • Producer: 通过交换将消息放入队列的应用程序。

注意: 消息的有效负载不是由 AMQP 定义的; 因此,可以使用协议传输各种不同类型的数据。

主要 AMQP 组件

Amqp 模型定义了消息如何接收、路由、存储、排队,以及应用程序部分如何处理这些任务,它依赖于以下组件的清晰集定义:

  • Exchange: 代理(即服务器)的一部分,它接收消息并将其路由到队列
  • Queue (消息队列) : 一个命名实体,消息与之关联,消费者从那里接收消息
  • 绑定: 将消息从交换器分发到队列的规则

Amqp 消息代理是如何工作的?

在 AMQP 中,“消息代理”转换为接收实际消息并将其转发给相关方的应用程序。

APPLICATION       EXCHANGE        TASK LIST        WORKER
   [DATA] -------> [DATA] ---> [D]+[D][D][D] --->  [DATA]
 Publisher        EXCHANGE          Queue         Consumer

Amqp 交易所是如何运作的?

接收到发布者(即客户端)的消息后,交换器处理消息并将其发送到一个或多个队列。 执行的路由类型取决于交换机的类型,目前有四种路由。

直接交换

直接交换类型涉及基于路由键将消息传递到队列。 可以将路由键视为定义用于设置消息将前往何处的附加数据。

直接交换的典型用例是工作者之间循环的负载平衡任务。

Fanout Exchange

扇出交换器完全忽略路由键,并将任何消息发送到绑定到它的所有队列。

扇出交换的用例通常涉及到向多个客户机发送消息,其目的类似于通知:

  • 共享消息(如聊天服务器)和更新(如新闻)
  • 应用程序状态(例如配置)

主题交换

主题交换主要用于发布 / 订阅(publish-subscribe)模式。 使用这种类型的传输,路由键和队列到交换机的绑定一起被用来匹配和发送消息。

只要需要使用者的专门参与(例如执行某种类型的操作的单个工作集) ,主题交换就可以很方便地根据键和模式相应地分发消息。

标题交换

头交换构成使用附加头(即消息属性)与消息耦合,而不是依赖路由键路由到队列。

由于能够使用字符串以外的数据类型(路由键就是字符串) ,头交换允许不同的路由机制,具有更多的可能性,但类似于通过键直接交换。

Amqp 邮件代理与电子邮件有何不同?

鉴于邮件包括发送信息(即发布) ,其接收和处理由邮件服务器(即代理)到相关邮箱(即队列) ,最后请求并获得所述信息(即消费) ,AMQP 定义的信息传输过程和任务可被视为类似。

除了基本原理实际上有很大不同之外,将 AMQP 与电子邮件区分开来的主要因素是目标服务质量(QoS)。 Amqp,就其本质而言,致力于可靠性、安全性、标准遵从性和安全性。

诸如持久性、将消息传递给多个消费者、确保和防止多重消费的可能性以及高速运行的协议等特性是这两者之间的主要因素。

对于业务级别的使用和适配,将消息发送(即发布)到交换(和队列)的身份验证要求意味着防止不需要的消息(如垃圾邮件) ,在建立 QoS 方面起着关键作用。