我们如何管理多个应用程序的 rabbitmq 配置
How do we manage rabbitmq configuration for multiple applications
目前,我们在管理 rabbitmq 的应用程序配置时使用以下方法:
我们使用 Ansible 构建了一个基本的 rabbitmq 集群。
然后,我们有20+个产品,每个产品都依赖于RabbitMQ,每个产品对消息的生产和消费都有不同的要求。
每个应用程序都有一个 json 文件来描述应用程序所需的每个 exchange/queue/binding(例如 rabbitmq.json),我们以预定义的方式生成 exchanges/queues/bindings(见下文)
每个应用程序注册它需要的生产者和消费者
每个应用程序还创建仅在应用程序运行期间有效的队列 运行(这种类型的队列仅被少数应用程序需要)
我的这个问题是围绕应用程序生命周期之外的交换、队列和绑定的生成。
目前,我们以预定义的方式在应用程序本身之外设置这些队列,即:
- 为每个应用程序创建一个 json 文件,描述应用程序所需的每个 exchange/queue/binding(例如 rabbitmq.json)
- 我们编写了一个脚本,然后遍历所有应用程序 rabbitmq.json 文件并生成一个包含所有 exchange/queue 的新的单个 Powershell 脚本(例如 generate_queues_exchanges_bindings.ps1)并绑定我们管理 api 调用(可通过 curl 执行)
- 然后我们执行在这个 generate_queues_exchanges_bindings.ps1 脚本中生成的 curl 命令
然而,最近我们一直在关注这个领域。我们中的一些人提议为每个应用程序(在启动时)使用流畅的界面来生成所有 exchanges/queues/bindings 等。这当然应该有效,因为所有这些命令本质上都是幂等的。
其他人不想在我们的应用程序中配置所有这些队列、交换和绑定,而是想提前预定义配置。
什么是 correct/recommended 方法?我们应该预先配置我们的 rabbitmq queues/exchanges/bindings 还是每个应用程序都应该负责(在启动时)确保创建这些 queues/exchanges/bindings?
如果您的应用程序确保在启动时(或 运行 时)所需的资源可用,则维护会更容易。如果您将资源保存在定义文件中,它们将与您的应用程序不同步,甚至可能不在源代码管理中。
我的 0.02 美元
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
目前,我们在管理 rabbitmq 的应用程序配置时使用以下方法:
我们使用 Ansible 构建了一个基本的 rabbitmq 集群。
然后,我们有20+个产品,每个产品都依赖于RabbitMQ,每个产品对消息的生产和消费都有不同的要求。 每个应用程序都有一个 json 文件来描述应用程序所需的每个 exchange/queue/binding(例如 rabbitmq.json),我们以预定义的方式生成 exchanges/queues/bindings(见下文) 每个应用程序注册它需要的生产者和消费者 每个应用程序还创建仅在应用程序运行期间有效的队列 运行(这种类型的队列仅被少数应用程序需要)
我的这个问题是围绕应用程序生命周期之外的交换、队列和绑定的生成。 目前,我们以预定义的方式在应用程序本身之外设置这些队列,即:
- 为每个应用程序创建一个 json 文件,描述应用程序所需的每个 exchange/queue/binding(例如 rabbitmq.json)
- 我们编写了一个脚本,然后遍历所有应用程序 rabbitmq.json 文件并生成一个包含所有 exchange/queue 的新的单个 Powershell 脚本(例如 generate_queues_exchanges_bindings.ps1)并绑定我们管理 api 调用(可通过 curl 执行)
- 然后我们执行在这个 generate_queues_exchanges_bindings.ps1 脚本中生成的 curl 命令
然而,最近我们一直在关注这个领域。我们中的一些人提议为每个应用程序(在启动时)使用流畅的界面来生成所有 exchanges/queues/bindings 等。这当然应该有效,因为所有这些命令本质上都是幂等的。 其他人不想在我们的应用程序中配置所有这些队列、交换和绑定,而是想提前预定义配置。
什么是 correct/recommended 方法?我们应该预先配置我们的 rabbitmq queues/exchanges/bindings 还是每个应用程序都应该负责(在启动时)确保创建这些 queues/exchanges/bindings?
如果您的应用程序确保在启动时(或 运行 时)所需的资源可用,则维护会更容易。如果您将资源保存在定义文件中,它们将与您的应用程序不同步,甚至可能不在源代码管理中。
我的 0.02 美元
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。