首页 > 解决方案 > RabbitMQ - 将具有共同属性的消息发送给同一消费者

问题描述

背景

我有一个包含许多机器的分布式系统。我有两种类型的应用程序 - 生产者和消费者。更具体地说——一个生产者和多个消费者。每台“消费机器”都有多个消费者。

系统中的所有消息都将进入同一个队列。消息如下所示:

{
    "Id": "Thisismyid",
    "CacheId": "CacheID"
    ...
}

我的消费者正在应用缓存策略以更快地处理队列消息。消费者下载消息后,将检查该消息是否CacheId先前已缓存。如果是 - 继续。如果没有 - 缓存它并继续。

同一台机器上的所有消费者共享同一个缓存存储库。

问题

当我有 1 个消费者时,这种结构是“最佳的”。因为,同一台机器缓存这些项目并多次使用它。

随着消费者数量的增加 - 缓存的效率正在下降。因为它更有可能由没有准备好使用缓存的节点下载项目。

问题

如何使用 RabbitMQ 将相同的消息“路由”CacheId为同一消费者\机器的处理以提高效率?就 RabbitMQ 资源而言,“成本”是多少?

标签: rabbitmqqueuemessage-queue

解决方案


您可以通过主题交换来做到这一点:https ://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html

但是,如果您有很多CacheId.

但我会改用集中式缓存。可能是 Redis:https ://redis.io/


推荐阅读