rabbitmq - RabbitMQ - 将具有共同属性的消息发送给同一消费者
问题描述
背景
我有一个包含许多机器的分布式系统。我有两种类型的应用程序 - 生产者和消费者。更具体地说——一个生产者和多个消费者。每台“消费机器”都有多个消费者。
系统中的所有消息都将进入同一个队列。消息如下所示:
{
"Id": "Thisismyid",
"CacheId": "CacheID"
...
}
我的消费者正在应用缓存策略以更快地处理队列消息。消费者下载消息后,将检查该消息是否CacheId
先前已缓存。如果是 - 继续。如果没有 - 缓存它并继续。
同一台机器上的所有消费者共享同一个缓存存储库。
问题
当我有 1 个消费者时,这种结构是“最佳的”。因为,同一台机器缓存这些项目并多次使用它。
随着消费者数量的增加 - 缓存的效率正在下降。因为它更有可能由没有准备好使用缓存的节点下载项目。
问题
如何使用 RabbitMQ 将相同的消息“路由”CacheId
为同一消费者\机器的处理以提高效率?就 RabbitMQ 资源而言,“成本”是多少?
解决方案
您可以通过主题交换来做到这一点:https ://www.rabbitmq.com/tutorials/tutorial-five-dotnet.html
但是,如果您有很多CacheId
.
但我会改用集中式缓存。可能是 Redis:https ://redis.io/
推荐阅读
- hadoop - 可以在 pod 中使用 ssh 吗?
- jquery - Show/hide content on hover/click
- angular - 将 CreateJS 导入 Angular 6 应用程序
- r - 在 ggplot2 中添加手动图例
- swift - 快速堆算法
- javascript - Meaning of var t={}; Variable equals curly braces
- c# - 如何在带有实体框架的 ASP .NET MVC 中创建和初始化没有视图的对象?
- python - Google DataStore - 如何按日期获取数据
- ios - Swift - 如何在从外部服务器验证后以编程方式更改视图
- javascript - Sql 函数,我在另一个“where 语句”中对一组数据使用“where 语句”