目前,我们在管理rabbitmq的应用程序配置时使用以下方法:
- 我们使用Ansible构建了一个基本的rabbitmq集群。
- 然后,我们有20多个产品,每个产品都依赖于RabbitMQ,每个产品对消息的生产和消费都有不同的要求。每个应用程序都有一个JSON文件,描述应用程序所需的每个交换/队列/绑定(例如,rabbitmq.json),我们以预定义的方式生成交换/队列/绑定(见下文)每个应用程序都需要注册生产者和消费者每个应用程序也只在应用程序运行期间实时创建队列(这种类型的队列只被少数应用程序需要)
我的这个问题是围绕着交换、队列和绑定的生成,它们的生命周期超出了应用程序的生命周期。目前,我们以预定义的方式在应用程序本身之外设置这些队列,即:
- 为每个应用程序创建一个JSON文件,描述应用程序所需的每个交换/队列/绑定(例如,rabbitmq.json)
- 我们编写了一个脚本,然后遍历所有应用程序的rabbitmq.json文件,并生成一个新的Powershell脚本(例如:generate_transmart.tag_exchanges_bindings.ps1),包含所有的exchange/queue和binding we管理API调用(可通过curl执行)
- 然后,我们执行在generate_exchanges_bindings.ps1脚本中生成的curl命令
最近,我们一直在关注这一领域。我们中的一些人建议每个应用程序(在启动时)使用fluent接口来生成所有的交换/队列/绑定等。这当然应该起作用,因为所有这些命令本质上都是幂等的。其他人不想在我们的应用程序中配置所有这些队列、交换和绑定,而想提前预定义配置。
正确/推荐的方法是什么?我们是否应该预先配置rabbitmq队列/交换/绑定,或者每个应用程序是否应该(在启动时)负责确保创建这些队列/交换/绑定?
1条答案
按热度按时间tvz2xvvm1#
如果您的应用程序能够确保在启动时(或运行时)所需的资源可用,那么维护工作将变得更加容易。如果您将资源保存在定义文件中,它们将与您的应用程序不同步,甚至可能不在源代码控制中。
我的0.02美元