我们公司有一个包装 RabbitMQ 的库,由一位已经离开的人创建。我正在使用 Rabbit 设计一个新系统,并正在确定声明队列、交换机和绑定的最佳方法。我们的 Rabbit 架构有几个联合全局区域,每个区域都有多个 Rabbit 节点。
发布消息和订阅队列的包装代码每次都会重新声明相关的交换机、队列和绑定。我的担忧是这可能会在每个消息发布时引入显着的延迟,特别是如果它需要等待确认队列/交换机在远程全局区域中存在。我期望每秒数百万条消息的基准测试不会为每个发布重新声明交换机。
简而言之,这种方法对我来说似乎有点浪费和过度警惕,但也许我漏了什么。
因此我有几个问题:
- 在全局联合的情况下,重新声明队列和交换机是否会对性能产生重大影响?
- 在每次使用时重新声明是否是一个好方法,因为它可以处理由于代理重启或显式删除导致的队列/交换机消失?
- 我们应该只在进程开始时声明队列和交换机,并期望它们在整个生命周期内持续存在吗?
- 耐用交换机和队列应该在 Rabbit 配置中声明,而不是由应用程序声明吗?
- 如果应用程序可能继续使用旧配置声明队列/交换机,那么如何处理队列/交换机的配置更改?应用程序只需处理声明失败并继续发布/消费吗?