Rabbitmq:exchange->routingkey->queue命名结构
Posted
技术标签:
【中文标题】Rabbitmq:exchange->routingkey->queue命名结构【英文标题】:Rabbitmq: exchange->routingkey->queue naming structure 【发布时间】:2014-07-12 15:23:10 【问题描述】:我正在使用直接交换,因为我希望将一份工作分配给一位消费者。
有不同的消费者群体会消费不同的工作。可以说我的应用程序称为“foo”。然后我有工作
bar1 bar2 bar3....将有一组单独的消费者处理“bar1”作业,然后是另一组消费者处理“bar2”等
我试图找出任何特定的命名/路由结构是否有好处,但没有找到任何指向一种或另一种方式的东西
问题 1) 我应该使用多个交换名称吗 交流:
exc_bar1 exc_bar2 exc_bar3或者单次交换最好 交流:
exc_foo然后使用路由键发送到正确的消费者队列 路由键
rk_bar1 rk_bar2 rk_bar3无论哪种方式我都无法找到任何东西,所以我认为这并不重要,但最好是问一下,以防万一我错过了一些东西并且它确实很重要。
背景信息
以防万一它是相关的
producer是一个python webapp,使用rabbitpy库 消费者是使用默认rabbitmq客户端库的c#应用程序
生产者可以设置 * 交易所名称 * 路由键名
消费者可以设置 * 交易所名称 * 路由键名 * 队列名称
【问题讨论】:
【参考方案1】:对于这种情况,我建议使用单个 exchange 来包含单个应用程序的所有作业,然后使用 queue 来表示每个作业类型,这然后可以有多个消费者(然后能够以循环方式处理来自该队列的消息)。
路由键然后可用于指导消费者他们正在处理哪个工作。
只有一个交换既可以作为逻辑分组(即在应用程序级别),又可以简化 RabbitMQ 内的管理/管理/监控。如果您有新的作业类型,您只需创建一个新的队列和绑定并更改路由键,而不是必须创建一个新的交换然后还必须创建一个新的队列和绑定。
如果以后你有一个完全不同的应用程序,那么我会说是时候为它创建一个新的 exchange 然后遵循我上面提到的相同的一般模型(假设它从高级别)。
我认为 RabbitMQ 网站上的 Routing tutorial 可能最适合您的情况,如果您正在寻找更多详细信息(以下链接适用于 Python,但它们C# 也有一个)。
【讨论】:
以上是关于Rabbitmq:exchange->routingkey->queue命名结构的主要内容,如果未能解决你的问题,请参考以下文章
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较
RabbitMQ三种Exchange模式(fanout,direct,topic)的性能比较