【问题标题】:How to make topic exchanges expandable如何让话题交流变得可扩展
【发布时间】:2013-02-21 13:59:42
【问题描述】:

所以我们会有一个看起来像这样的主题交换

{class}.{genus}

所以我们有一些消费者与主题绑定

mammal.*

(或bird.*等)

现在假设稍后我们想要包含物种信息,所以主题交换现在看起来像这样:

{class}.{genus}.{species}

现在老消费者坏了:(

但是他们可以绑定为

mammal.*.#

并且能够听取未来添加的任何信息。然而,这是我的团队自己提出来的,这让我问:

  • 这是一种好的做法吗?
  • 我应该注意这方面的权衡吗?
  • 是否有另一种方法让生产者能够在不破坏现有消费者、不发布到多个交易所的情况下添加信息?

【问题讨论】:

    标签: rabbitmq amqp


    【解决方案1】:

    通常,如果您需要最大程度地控制队列传递并希望在 rabbit 中执行逻辑,那么您应该考虑 header exchange

    通常,当我们编写发布代码时,我们确切地知道它需要进入哪个队列,因此您是否想使用路由键或布尔值来执行此操作可能不会有太大区别,具体取决于您的应用程序。

    这带来了另一个需要注意的设计注意事项:您是否希望在 rabbit 中使用路由逻辑。有些人更喜欢只使用简单的路由键和直接或主题交换,专注于灵活的消费者。显然,很难猜测什么最适合您的应用程序。

    请记住,您的消费者将被订阅(通常是静态的)交换所交付的队列。同样mammal.#mammal.*.# 相同(参见:ref

    【讨论】:

    • RabbitMQ In Action de facto 声明不推荐使用标头交换并且应该使用主题 - 您同意这一点还是我应该注意标头有任何困难?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多