RabbitMQ 3.13.0 现已发布!
RabbitMQ 3.13 现已发布,支持 MQTTv5、流过滤,并显著提升了经典队列的性能,尤其是针对大型消息的性能。
阅读专门的博客文章,以了解更多关于这些更改的详细信息
RabbitMQ 3.13 是 3.x 系列的最后一个次要版本。下一个版本将是 4.0!
对 Khepri(Mnesia 替换)的实验性支持
除了第一段中提到的新功能外,RabbitMQ 3.13 还包含对 Khepri 的实验性支持。Khepri 是 RabbitMQ 元数据的全新存储后端,旨在取代 Mnesia。它尚未准备好用于生产环境,但我们鼓励用户在测试环境中尝试并提供反馈。
我们计划在未来完全移除 Mnesia。这将显著提升 RabbitMQ 对网络分区容错的能力。一旦我们切换到 Khepri,将不再存在分区处理策略配置(pause_minority
、autoheal
等)——Khepri 基于 Raft 协议,就像仲裁队列一样,因此当出现分区时该做什么的语义是明确定义的,不可配置。
关于 Khepri 的录制演讲已发布。
以下命令启用了无法禁用的实验性功能。除非您已对其进行全面测试,否则请勿在生产环境中使用它!
要启用 Khepri(**在 3.13 中是实验性的且不可逆转!**),请运行
rabbitmqctl enable_feature_flag khepri_db
启用 Khepri 后,您应该不会注意到任何差异。主要区别在于您声明交换机、队列、绑定等时的内部发生的情况。我们鼓励您进行实验,例如,先声明您的实际拓扑结构,然后再启用 Khepri(以验证一切按预期工作),引入故障以验证集群保持可用(只要大多数节点处于运行状态并已连接),等等。如果您遇到任何问题,请报告。
功能标志
RabbitMQ 3.13.0 包含一些新的 功能标志。但是,它不会将任何旧的标志设置为必需(当然,除了那些在 3.12 中已经必需的标志)。因此,如果您禁用了某些功能标志,从 3.12 升级到 3.13 仍然可以工作。在 3.11 -> 3.12 升级中,如果并非所有功能标志都已启用,一些用户遇到了问题。从 3.12 迁移到 3.13 时,不会发生此类问题。
成功升级后,您应始终启用所有非实验性功能标志。
经典队列:版本 1 仍然是默认版本
我们原本打算在 3.13 中将经典队列的默认版本更改为 v2,但最终决定不这么做。因此,v1 仍然是默认版本,v2 仍然是可选功能。但是,**强烈建议使用经典队列 v2**!您可以通过在策略中设置 x-queue-version=2
来升级您的队列。要确保新队列默认情况下创建为 v2,您可以设置
classic_queue.default_version = 2
在 rabbitmq.conf
中。
v1 仍然是默认版本的原因与 v2 的任何缺点无关,而是由于更改节点默认设置导致某些情况下在 v1 和 v2 之间来回迁移。特别是,镜像队列将在滚动升级期间在 v1 和 v2 之间来回升级和降级,因为不同节点上的默认设置不同。为了避免此类情况的任何风险,我们决定不进行此更改。
将来,经典队列 v2 将成为唯一选项。届时,队列镜像将被移除,因此不会存在镜像相关问题的风险。
消息容器
消息容器 是对内部消息处理方式进行的几乎不可见的更改。RabbitMQ 最初被构建为 AMQP 0-9-1 代理。但是,多年来,添加了对 AMQP 1.0、MQTT、STOMP 和流的支持。这导致了一些内部消息格式转换,因为不同的协议在概念上基本相似,但在细节上有所不同,例如可用数据类型。
消息容器基于 AMQP 1.0 的消息格式,使用当今的多协议假设对内部消息表示进行现代化,并使所有协议之间的转换变得明确。
这些转换现在已 记录。
3.x 系列到此结束!
RabbitMQ 3.0.0 于 2012 年 11 月发布。由于各种历史原因,主版本从那时起就没有增加。但是,现在是时候告别 3.x 系列,并在今年晚些时候转向 4.0 了。版本 4.0 将包含一些重大更改,但最重要的是,它将不再支持经典队列的镜像。与镜像相关的策略键将被忽略,队列将变为单节点队列。这是对需要高可用队列的用户发出的最终呼吁:尽快迁移到仲裁队列,或者在适用情况下迁移到流。与镜像队列相比,您将享受更高的数据安全性、可靠性和更好的性能。