Advanced Message Queuing Protocol:高级消息排队协议

文章采自百科,之所以重复,是因为我觉得看一遍不如自己写一遍印象更深。

AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,一个提供消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

AMQP协议

第一张 概述

什么是AMQP??

其实就是高级消息队列协议使得遵从该规范的客户端应用消息中间件服务器全功能互操作成为了可能。

为什么要用AMQP??

我们的目标是实现一种在全行业广泛使用的标准消息中间件技术,以便降低企业和系统集成的开销,并且向大众提供工业级的集成服务。我们的宗旨是通过AMQP,让消息中间件的能力最终被网络本身所具有,并且通过消息中间件的广泛使用发展出一系列有用的应用程序。说白了就是定义一个协议让大家都按照标准来办事

AMQP的范围????

为了完全实现消息中间件的互操作性,需要充分定义网络协议和消息代理服务的功能语义。

因此AMQP定义网络协议和代理服务如下:

一套确定的消息交换功能,也就是“高级消息交换协议模型”。AMQP模型包括一套用于路由和存储消息的功能模块,以及一套在这些模块之间交换消息的规则。

一个网络线级协议(数据传输格式),客户端应用可以通过这个协议与消息代理和它实现的AMQP模型进行交互通信。

可以只是先AMQP协议规范中的部分语义,但是我们相信明确的描述这些语义有助于理解这个协议。

相关协议

AMQP模型:

我们需要明确的定义服务器的语义,因为所有服务器实现都应该保持这些语义的一致性,否则就无法进行互操作。

因此AMQP模型描述了一套模块化的组件以及这些组件之间进行连接的标准规则。

在服务器中,三个主要功能模块连接成一个处理链完成预期的功能:哪3个???

1、exchange 接收发布应用程序发送的消息,并根据一定的规则将这些消息路由到 消息队列

2、message queue 存储消息,直到这些消息被消费者安全处理完为止    这白话文不就是消息队列吗

3、binding 定义了exchange和message queue之间的关联,提供路由规则

使用这个模型我们可以很容易的模拟出 存储转发队列 和 主题订阅 这些典型的消息中间件的概念

一个AMQP服务器类似于邮件服务器,exchange 类似于消息传输代理(email里的概念),message queue类似于邮箱,Binding定义了每个传输代理中的消息路由表,发布者将消息发给特定的传输代理,然后传输代理将这些 消息 路由到邮箱中,消费者从这些邮箱中取出消息。

在以前的中间件系统的应用场景中,发布者直接将消息发送给邮箱或者邮件列表。。

区别就在于 用户 可以控制message queue 与 exchange的连接规则,这可以做很多有趣的事情,比如定义一条规则  “将左右包含这样这样的 的消息头的消息  都复制一份 再发送到消息队列中“

AMQP模型有以下目标:

  • 支持金融服务领域的语义要求
  • 支持金融服务领域所要求的性能要求
  • 能够很方便的扩展新的消息路由和队列
  • 通过AMQP协议(AMQP和AMQP Protocol的是整体和部分关系),服务器应用可以通过编程的方式来实现具体的功能语义。
  • 简单而灵活

AMQP协议是啥??????????????

AMQP协议是一个二进制协议,拥有一些现代特点:多信道、协商式、异步、安全、跨平台、中立、高效。

AMQP通常分为三层:

模型定义了一套命令(按功能分类),客户端应用可以利用这些命令来实现他的业务功能???????这也太官方了吧

会话层负责将命令从客户端 应用   传递给    服务器 ,再将服务器的应答传递给客户端应用,会话层为这个传递过程提供可靠性、同步机制和错误处理。

传输层提供 帧处理、信道复用、错误检测、和数据表示。

实现者可以将传输层替换成任意传输协议,只要不改变AMQP协议中 与 客户端应用程序相关的功能。实现者还可以使用其他的高层协议中的会话层。

AMQP模式的设计由以下几个需求所驱动:

  • 保证遵从AMQP规范的服务器  实现  之间能够进行互操作
  • 为服务质量提供显式控制
  • 支持所有消息中间件的功能:消息交换、文件传输、流传输、远程进程调用等
  • 兼容已有的消息API规范(比如Sun公司的JMS规范)  JMS什么规范=-=??????????
  • 形成一致和 明确的命名
  • 通过AMQP协议可以完整的配置 服务器线路 (TODO: server wiring------服务器连接)
  • 使用命令符号可以很容易的映射成 应用级别的API
  • 明确定义每一个操作只做一件事情

AMQP传输层的设计由以下几个主要的需求所驱动,这些需求不分先后次序

  • 使用能够快速打包解包的二进制编码来保证数据的紧凑型
  • 能够处理任意大小的消息。
  • 允许零拷贝数据传输(比如远程DMA)???????????
  • 一个连接支持多个会话
  • 保证会话能够从网络错误、服务器失效中恢复
  • 为了长期存在,没有隐含的内置限制(TODO: to be long-lived,with no significant in-built limitations)[寿命长,没有明显的内置限制]
  • 异步传输消息
  • 能够很容易的处理新的和变化的需求
  • 高版本的AMQP规范能够兼容低版本的规范
  • 使用 强断言模型 来保证应用程序的 可修复性
  • 保持编程语言中的中立性
  • 适宜使用代码生成工具生成协议处理模块

 

功能范围:

  • 支持各种消息交换的体系结构
  • 存储转发(多个消息发送者,单个消息接收者)
  • 分布式事务(多个消息发送者,多个消息接者)
  • 发布订阅(多个消息发送者,多个消息接收者)
  • 基于内容的路由(多个消息发送者,多个消息接收者)?????
  • 文件传输队列(多个消息发送者,多个消息接收者)????
  • 点对点连接(单个消息发送者,单个消息接收者)????

 

技术术语:我感觉这才是重点  =-=   前面感觉都是官话。。。。

  1. AMQP模型(AMQP Model):一个由关键实体和语义表示的逻辑框架,遵从AMQP规范的服务器必须提供这些实体和语义。为了实现本规范中定义的语义,客户端可以发送命令来控制AMQP服务器
  2. 连接(Connection):一个网络连接,比如TCP/IP套接字连接??????这又是森么鬼
  3. 会话(Session):端点之间的命名对话。在一个会话上下文中,保证”恰好传第一次“。
  4. 信道(Channel):多路复用连接中的一条独立的双向    数据流  通道。为绘画提供物理传输介质。
  5. 客户端(Client):AMQP连接或者会话的发汽车,AMQP是非对称的,客户端生产和消费消息,服务器存储和路由这些消息。
  6. 服务器(Service):接收客户端连接,实现AMQP消息队列和路由功能的进程。也称为  消息代理。
  7. 端点(Peer):AMQP对话的任意一方。一个AMQP连接包括两个端点(一个是客户端一个是服务器)
  8. 搭档(Partner):当描述两个端点直接的交互过程时,使用术语”搭档“来表示  另一个   端点的简记法。比如我们定义端点A和端点B,当他们进行通信时,端点B是端点A 的搭档,端点A 是端点B 的搭档
  9. 片段集(Assembly):段的有序集合,形成一个逻辑工作单元。
  10. 段(Segment):帧的有序集合,形成片段集中的一个完整子单元。
  11. 帧(Frame):AMQP传输的一个原子单元。一个帧是一个段中的任意分片。
  12. 控制(Control):单向指令,AMQP规范假设这些指令的传输时不可靠的。
  13. 命令(Command):需要确认的指令,AMQP规范规定这些指令的传输是可靠的
  14. 异常(Exception):在执行一个或者多个命令时可能发生的错误状态。
  15. 类(Class):一批用来描述某种特定功能的AMQP命令或者控制。
  16. 消息头(Header):描述消息数据属性的一种特殊段。
  17. 消息体(Body):包含应用程序数据的一种特殊段。消息体段对于服务器来说完全透明-------服务器不能查看或者修改消息体
  18. 消息内容(Content):包含在消息体 段 中 的 消息数据
  19. 交换器(Exchange):交换器中的实体,用来接收生产者发送的消息并将这些消息路由给 服务器 中的 队列。
  20. 交换器类型(Exchange Type):基于不同路由语义的交换器类。
  21. 消息队列(Message Queue):一个命名实体,用来保存消息知道发送给消费者
  22. 绑定器(Binding):消息队列和交换队列之间的关联
  23. 绑定关键字(Binding Key):绑定的名称  一些交换器类型可能使用这个名称作为定义绑定器 路由行为的模式????
  24. 路由关键字(Routing Key):一个消息头,交换器可以用这个消息头决定如何路由某条消息。
  25. 持久存储(Durable):一种服务器资源,当服务器重启时,保存的消息数据不会丢失
  26. 临时存储(Transient):一种服务器资源,当服务器重启时,保存的消息数据会丢失
  27. 持久化(Persistent):服务器将消息保存在可靠的磁盘存储中,当服务器重启时,消息不会丢失。
  28. 非持久化(Non-Persistent):服务器将消息保存在内存中,当服务器重启时,消息可能会丢失
  29. 消费者(Consumer):一个消息队列中请求消息的客户端应用程序
  30. 生产者(Producer):一个向交换器发布消息的客户端应用程序
  31. 虚拟主机(Virtual Host):一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证   和   加密环境的独立服务器域  客户端应用程序在登陆到服务器之后,可以选择一个虚拟主机
  32. 主题:通常指发布消息;AMQP规范用一种或多种交换器来实现主题。
  33. 服务:通常等同于服务器。AMQP规范使用”服务器“这个术语来兼容IETF的标准术语,并且明确了协议中每个部分的校色(两方也可能是AMQP服务)
  34. 消息代理:等同于服务器。AMQP规范使用术语”客户端“和  ”服务器“ 来兼容IETF的标准术语

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AMQP(高级消息队列协议)是一种开放的网络协议,用于在分布式系统中传递和存储消息。它广泛应用于各种实时通讯、物联网、金融交易等领域。 AMQP定义了消息的格式和交换方式,并提供了强大的消息路由和可靠性机制,确保消息的可靠传输和处理。它可实现多对多的通信模式,支持消息的分发、过滤、排序等高级特性。 RabbitMQ是一个基于AMQP协议的开源消息中间件。它提供了一个可靠的、灵活的、可扩展的消息分发系统。RabbitMQ基于可插拔的插件机制,可以在不同的场景中灵活配置和扩展其功能。它具有高可用性、可靠性和可伸缩性,在分布式系统中被广泛应用。 RabbitMQ的核心概念包括生产者、消息队列和消费者。生产者负责产生消息并将其发送到RabbitMQ的消息队列中。消息队列是RabbitMQ的核心组件,用于存储消息,并根据一定的规则将消息分发给消费者。消费者则从消息队列中订阅并接收消息进行处理。 RabbitMQ还支持多种消息模型,如发布-订阅模型、工作队列模型和路由模型等。它可以根据不同的业务需求和场景,选择合适的消息模型来实现消息的可靠传输和处理。 总之,AMQP是一种用于分布式系统的高级消息队列协议,而RabbitMQ是基于AMQP的开源消息中间件。它们通过提供消息的格式、交换方式和路由规则等机制,实现了可靠的、灵活的消息传输和处理,极大地方便了分布式系统的开发和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值