1

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

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

4

3 回答 3

2

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

于 2014-05-22T16:45:40.120 回答
0

只需让您的生产者将足够的信息放入路由键中,从而使消息进入 Exchange 另一端的正确队列。

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

于 2012-09-12T03:51:06.357 回答
0

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

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

您可以决定进行静态分片,也许您有 10 个队列,每个队列有一个消费者。你可以实现一个一致的散列函数,这样键是 CLIENT_ID % 10。

可以提出另一种方法和非静态解决方案,您可以尝试超越此架构。

于 2012-09-12T15:36:02.447 回答