Rabbitmq队列分片

Rabbitmq队列分片,rabbitmq,sharding,Rabbitmq,Sharding,我必须实现这个场景: 外部应用程序向rabbitmq发布消息。 此消息具有客户端id属性。我们可以将此id放置到路由密钥、消息头或其他一些属性。 我必须在exchange路由逻辑中实现分片-消息应该根据客户机id范围传递到特定队列 可以在标准交换中实现吗? 如果不是,我应该以什么交换为基础? 如何动态更改客户端id范围?只要让制作者在路由密钥中输入足够的信息,使消息进入Exchange另一端的正确队列即可 例如,创建两个名为1和2的队列,并使用与名称匹配的路由键将它们绑定。然后让生产者决定在生成

我必须实现这个场景:
外部应用程序向rabbitmq发布消息。 此消息具有客户端id属性。我们可以将此id放置到路由密钥、消息头或其他一些属性。
我必须在exchange路由逻辑中实现分片-消息应该根据客户机id范围传递到特定队列

可以在标准交换中实现吗?
如果不是,我应该以什么交换为基础?

如何动态更改客户端id范围?

只要让制作者在路由密钥中输入足够的信息,使消息进入Exchange另一端的正确队列即可


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

AMQP没有任何分片的显式实现,但它的体系结构应该可以帮助您做到这一点

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

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


可以提出另一种方式和非静态解决方案,您可以尝试覆盖此体系结构。

看看。从v3.6.0开始,它就包含在RabbitMQ发行版中。

这不是理想的解决方案,因为外部应用程序不应该知道内部逻辑。它们可能会让您走运。不仅如此,如果能够在不更改发布服务器的情况下添加和删除其他队列,那将非常有用。您找到解决方案了吗?我需要同样的基本要求。我们必须在rabbitmq之外实现这个功能。实际上,我已经设法使用一致的散列交换(因为我不关心范围,我关心分布)和权重(我相信对于范围,可以使用x模散列交换)来解决这个问题。每当我们需要“新”碎片时,我们都会创建一个新的订户和队列,并将其绑定到同一个交换。因此,每个订户自然只处理部分数据。如果它得到不相关的数据(因为添加了碎片),我们可以将消息重新发送到交换,它将把它路由到正确的q。