背景
我有一个有很多机器的分布式系统。我有两种类型的应用程序-生产者和消费者。更具体地说--一个生产者和多个消费者。每台“消费者机器”都有多个消费者。
系统中的所有消息都将进入同一队列。消息看起来像这样:
{
"Id": "Thisismyid",
"CacheId": "CacheID"
...
}我的使用者正在应用缓存策略,以便更快地处理队列消息。一旦消费者下载了邮件,就会检查之前是否已经缓存了CacheId。如果是-继续。如果没有-缓存它并继续。
同一台机器上的所有使用者共享相同的缓存存储库。
问题所在
当我有一个消费者时,这种结构是“最优的”。因为,同一台机器缓存这些项并多次使用它。
随着消费者数量的增加,缓存的效率也在下降。因为更有可能的是,项目将由没有准备好使用缓存的节点下载。
问题是
如何使用RabbitMQ将具有相同CacheId的消息“路由”到同一消费者\机器来处理,以提高效率?RabbitMQ资源的“成本”是多少?
发布于 2020-10-02 19:16:52
你可以通过一个主题交换来做到这一点:https://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html
但是如果你有很多CacheId,这很快就会变得很复杂。
但我会使用集中式缓存。可能是Redis:https://redis.io/
https://stackoverflow.com/questions/64132633
复制相似问题