Rabbitmq队列分片

时间:2012-09-11 20:31:07

标签: rabbitmq sharding

我必须实施这个场景:
外部应用程序向rabbitmq发布消息。 此消息具有client_id属性。我们可以将此id放在路由键或消息头或其他属性中 我必须在交换路由逻辑中实现分片 - 应该根据client_id范围将消息传递到特定队列。

是否可以在标准交易所实施? 如果不是我应该以什么交换为基础?
如何动态更改client_id范围?

3 个答案:

答案 0 :(得分:2)

看看rabbitmq plugin。它包含在从v3.6.0开始的RabbitMQ发行版中。

答案 1 :(得分:0)

让生产者在路由密钥中放入足够的信息,使邮件进入Exchange另一端的正确队列。

例如,创建两个名为1和2的队列,并使用与名称匹配的路由键绑定它们。然后让您的生产者决定在生成事件消息时使用哪个路由密钥。名字以字母a-m开头的客户转到1,n-z转到2,你明白了。它会将分片推送给制作人,但这对您的应用程序来说可能没问题。

答案 2 :(得分:0)

AMQP没有明确的分片实现,但它的架构应该可以帮助你做到这一点。

将消息传播到多个队列只是一个rabbitmq挑战(并且是amqp规范的一部分),并且通过路由,您可以附加异构消费者来处理通过同一交换路由的特定消息。因此,生产者应该推送特定队列/消费者使用的特定密钥......

您可以决定进行静态分片,也许您有10个队列,每个队列有一个消费者。您可以实现一致的散列函数,使得密钥为CLIENT_ID%10。

可以推荐另一种方式而不是静态解决方案,您可以尝试通过这种架构。