架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 848|回复: 0

【转】【译】RabbitMQ: 谁来创建 Queue 和 Exchange

[复制链接]
发表于 2023-5-3 22:31:59 | 显示全部楼层 |阅读模式
译文

消息传递是任何一个分布式系统中的基本的组成部分. 它允许一个生产者发送一段消息给任意数量的消费者, 并且不必要知道任何关于消费者信息. 这对真正意义上的异步和解耦通信有很大的帮助。

QQ截图20230503222908.jpg

当你使用 RabbitMQ 的时候, 上面的示图展示了很基础但很典型的一种结构. 一个生产者给交换机发送一段消息. 交换机根据路由逻辑, 把消息放到绑定该交换机的队列里面. 更近一步说, 如果是一个广播类型的交换机, 这个消息的复制会重复的发送给每一个队列. 一个消费者随后可以接收并处理这个消息.

对于上面这种结构能够工作即生产者和消费者能够成功运行的一个很重要的猜想是, 所有 RabbitMQ 的组件(即 队列, 交换机和绑定关系)必须事先创建好. 一个消费者不能给交换机发送消息如果这个交换机不存在的话, 一个消费者同样也不能从一个不存在的队列中处理消息.

因此, 这个并不是难理解的, 在生产者/消费者发送消息/接收消息之前,让一个生产者/消费值去创建队列, 交换机和绑定关系. 让我们看一看这个如果去做即每一种方式的优缺点.

1. 区分责任

QQ截图20230503222938.jpg

图片翻译(1.生产者创建交换机 2. 消费者创建队列并把队列绑定到交换机上)

为了让生产者和消费者充分的解耦, 理想情况下, 生产者仅仅知道关于交换机的信息(而不是队列), 并且消费者仅仅知道关于队列的信息(而不是交换机). 绑定关系表明交换机和队列的关系

一种可能能方式是让生产者处理交换机的创建, 消费者创建队列并将队列绑定在交换机上. 这种去耦合的方式的优点是, 如果消费者需要队列, 仅仅是按照需求, 简单的创建队列并绑定它们就可以了, 并不需要让生产者知道任何关于队列的信息. 但这并不是充分的解耦: 因为消费者为了绑定必须要知道这个交换机.

2. 生产者创建一切

在生产者运行的时候, 可以配置去创建所有需要的组件(交换机, 队列和绑定关系). 这种方式的好处是, 没有消息会丢失掉(因为队列已经创建好并绑定到交换机上了, 并不需要让任何消费者先启动).

然而, 这就意味着, 生产者必须要知道所有需要和交换机绑定的队列. 这是一种耦合度很高的方式. 原因是每次需要添加新队列的时候, 生产者必须要重新配置和部署以用来创建队列和绑定队列

3. 消费者创建一切

相反的方式是, 在消费者运行的时候, 让消费者去创建它需要的交换机, 队列和绑定关系. 和前一种方式一样, 这种方式产生了耦合, 因为消费者必须要知道它们要绑定队列的交换机的信息. 交换机如果有了任何改动(例如重命名), 意味着所有的消费者必须要重新配置和部署. 当存在大量队列和消费者时, 这种复杂性可能会令人望而却步.

4. 两者都不创建任何东西

一个完全不同的方法是既不让生产者也不让消费者去创建任何要求的组件. 相反, 它是事先使用管理插件的用户界面或管理 CLI 去创建. 这种方式由下面几种优点:

  • 生产者和消费者可以完全的解耦. 生产者知道的仅仅是交换器, 消费者知道的仅仅是队列.
  • 这可以很容易地作为部署管道的一部分进行脚本化和自动化
  • 任何更改(例如新的队列)都可以添加, 而不需要触及任何现有的, 已经部署的发布者和消费者


总结

在分布式系统中, 异步消息是一种很有用的方式实现解耦, 但是为了保持它们解耦, 维护底层消息传递结构(在RabbitMQ中, 这些是队列、交换和绑定) 的有效策略是必要的.

虽然发布者和使用者服务可能自己负责创建它们需要的内容, 但在初始消息丢失、耦合和操作维护(在配置和部署方面) 方面可能会付出沉重的代价

最好的方法可能是在它所属的地方处理消息传递系统配置: 在应用程序之外编写脚本. 这确保了服务保持解耦, 并且队列系统可以根据需要动态更改, 而不必影响大量现有服务。

原文:https://blog.csdn.net/zjhcxdj/article/details/110235162
英文原文:https://gigi.nullneuron.net/gigilabs/rabbitmq-who-creates-the-queues-and-exchanges/





上一篇:.NET 7 新增的 IParsable 接口介绍
下一篇:VSTO(四)将 Picture 图片填充到 Word 文档
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-27 21:23

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表