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