【发布时间】:2016-05-28 11:45:02
【问题描述】:
在我的工作场所,我们有一个围绕 RabbitMQ 的包装库,由不再在这里工作的人创建。我正在使用 Rabbit 设计一个新系统,并且正在制定声明队列、交换和绑定的最佳方法。我们的 Rabbit 架构有几个联合的全局区域,每个区域都有多个 Rabbit 节点。
发布消息和订阅队列的包装代码每次都重新声明相关的交换、队列和绑定。我担心这可能会给每条消息发布带来很大的延迟,特别是如果它需要等待确认远程全局区域中存在队列/交换。我希望每秒数百万条消息的基准不会为每次发布重新声明交换。
简而言之,这种方法对我来说似乎有点浪费和偏执,但也许我错过了一些东西。
所以我有几个问题:
- 考虑到全球联合,重新声明队列和交换是否会对性能造成重大影响?
- 在每次使用时重新声明是否是一种好方法,因为它可以处理由于代理重新启动或显式删除而导致的队列/交换消失?
- 我们是否应该只为每个进程声明一次队列和交换 并期望它们能持续一生?
- 是否应该在 Rabbit 配置中声明持久交换和队列,而不是由应用程序声明?
- 如果应用程序可能继续使用旧配置声明队列/交换的配置更改,应如何处理?应用程序是否应该只处理声明失败并继续发布/消费?
【问题讨论】: