RabbitMQ 4 - Amazon MQ

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

RabbitMQ 4

亚马逊 MQ 仅在所有支持的实例大小的 mq.m7g 实例类型上支持 RabbitMQ 4 版本系列中的 RabbitMQ 4.2。

重要

您只能在 RabbitMQ 4.2 上创建新的经纪商。目前不支持从 RabbitMQ 3.13 进行原地升级。

重要

亚马逊 MQ 上针对 RabbitMQ 4.2 经纪商的默认队列类型将是 “法定人数”。如果在创建队列期间未指定队列类型参数,则将创建法定队列。

出于耐久性需求,我们强烈建议在 RabbitMQ 4 上使用法定队列,因为不能保证经典队列在所有情况下都具有持久性。

亚马逊 MQ 上的 RabbitMQ 4 中引入了以下更改

  • AMQP 1.0 作为核心协议:有关更多信息,请参阅协议。

  • 本地铲子:除了 AMQP 0-9-1 和 AMQP 1.0 之外,Shovels 现在还支持一种名为 “本地” 的新协议。本地铲子内部基于 AMQP 1.0,但它们不是使用单独的 TCP 连接,而是使用集群节点之间的集群内连接和内部节点来发布和使用 APIs 消息。与 AMQP 0-9-1 和 AMQP 1.0 相比,它只能用于在同一集群内消费和发布,并且可以提供更高的吞吐量,同时使用的资源更少。

  • 法定队列支持消息优先级:法定队列消息优先级始终处于活动状态,不需要策略即可起作用。一旦法定队列收到设置了优先级的消息,它就会启用优先级划分。法定人数队列内部仅支持两个优先级——高优先级和普通优先级。未设置优先级的邮件将映射为正常,优先级 0-4 也将映射为正常。优先级高于 4 的邮件将被映射到高。高优先级消息将优先于普通优先级消息,比例为 2:1,也就是说,对于每 2 条高优先级消息,队列将传送 1 条普通优先级消息(如果有)。因此,法定队列实现了一种非严格的 “公平份额” 优先级处理。这样可以确保在处理普通优先级消息时始终取得进展,但优先级较高的优先级优先级优先级为 2:1。

  • Khepri:Khepri 被用作 RabbitMQ 4 经纪商的默认元数据存储

  • 双向 TLS (mTLS):亚马逊 MQ 支持 RabbitMQ 经纪商的双向 TLS (mTLS),允许客户使用证书进行身份验证。有关更多信息,请参阅 mTLS 配置

  • SSL 证书身份验证插件:SSL 身份验证插件使用 mTLS 连接中的客户端证书对用户进行身份验证,允许使用 X.509 客户端证书而不是用户名和密码凭证进行身份验证。有关更多信息,请参阅 SSL 证书身份验证

  • HTTP 身份验证插件:HTTP 身份验证后端插件允许将身份验证和授权委托给外部 HTTP 服务。有关更多信息,请参阅 HTTP 身份验证和授权

亚马逊 MQ 上的 RabbitMQ 4 中已弃用以下功能

  • 经典队列的镜像:继续支持经典队列,无需对客户端库和应用程序进行任何重大更改,但它们现在是一种非复制队列类型。客户端将能够连接到任何节点,以便从任何非复制的经典队列中发布和使用。为了复制和数据安全,建议使用法定队列。

  • 移除全局 QoS:建议客户设置每个使用者 QoS(非全局),而不是全局 QoS,后者对整个频道使用单个共享预取。

  • 对临时非排他性队列的支持:临时队列是指其生命周期与其声明所在节点的正常运行时间相关的队列。在单实例代理中,它们会在节点重新启动时被删除。在集群部署中,当它们所在的节点重新启动时,它们将被删除。我们建议使用队列 TTL 在闲置一段时间后自动删除未使用的空闲队列。继续支持独占队列,一旦移除所有与该队列的连接,该队列就会被删除。

在亚马逊 MQ 上升级到 RabbitMQ 4.2 时,以下重大更改可能会影响您的应用程序

  • 默认队列类型:RabbitMQ 4 代理上的默认队列类型设置为法定人数。如果在创建队列期间未指定队列类型参数,则将创建法定队列。

  • 法定队列的默认重新传送限制设置为 20:重新传送 20 次或以上的邮件将被删除或丢弃(删除)。如果队列的常见情况是每封邮件 20 次传送,则必须为此类队列配置死写目标或更高的限制,以避免数据丢失。推荐的方法是通过政策。

  • amqplib:于 0.10.7 的 Node JS 客户端 amqplib 版本或任何 f rame_max < 8192 的 AMQP 客户端库都无法连接到 RabbitMQ

  • 默认资源限制:适用于 RabbitMQ 的 Amazon MQ 对连接、频道、每个频道的使用者、队列、虚拟主机、铲子、交换和最大消息大小引入了默认资源使用限制。它们充当保护代理可用性的护栏,并且可以使用配置进行自定义,以满足您的特定要求。

亚马逊 MQ 上的 RabbitMQ 4 不支持以下功能

  • 本地随机交换:Amazon MQ 不支持本地随机交换,因为 Amazon MQ 节点位于网络负载均衡器后面。

  • 消息拦截器:亚马逊 MQ 不支持 RabbitMQ 消息拦截器

  • 每个队列指标:亚马逊 MQ 不会通过提供 RabbitMQ 4 经纪商的 RabbitMQ 队列指标。 AWS CloudWatchAmazon MQ 仍将通过以下方式提供经纪商级别的指标。 AWS CloudWatch您可以使用 RabbitMQ 管理 API 查询队列指标。我们建议每隔一分钟或更长时间查询特定队列的指标。