【问题标题】:Redis queue vs MSMQRedis 队列与 MSMQ
【发布时间】:2013-10-23 09:24:44
【问题描述】:
长期以来,我们一直在使用 msmq 和 redis 队列 (IRedisList)。
几个月前,我们开始尝试 redis pub-sub。
我们的应用程序有 20 多个服务,它们从队列中读取消息或使用 redis 订阅频道。
我们还有十多个向他们发送消息的队列。
该应用程序是多线程的。
那我想从你这里得到什么?
现在我们有一些时间来决定我们想要使用上述哪种队列以及我们想要用不同类型的队列替换什么。
我试图寻找有关 MSMQ VS Redis 的帖子,但没有找到足够的信息。
有人可以就这个问题给我建议吗?
【问题讨论】:
标签:
c#
.net
redis
servicestack
publish-subscribe
【解决方案1】:
IMO,你想在这里比较苹果和橘子。
MSMQ 是一种企业级 MOM(面向消息的中间件,即排队系统),提供持久性、事务支持和一组丰富的功能。
Redis 是一种快速的内存数据结构服务器,您可以在其上构建队列系统。使用 Redis 正确实现 MSMQ 的基本功能已经是一项艰巨的任务。可能根本无法实现高级功能(如分发事务支持)。
我建议尝试列出您期望从排队系统中获得的属性:
- 您需要持久性吗?
- 您需要交易支持吗?
- 您需要分布式事务支持吗?
- 您需要“一次且仅一次”的交付语义吗?最多一次?至少一次?
- 您是否需要多个重试策略(线性延迟、指数退避等...)?
- 您需要异常/死队列吗?
- 您需要保留项目吗?
- 您需要队列浏览支持吗?队列管理功能?
- 您需要物品优先级管理吗?
- 您需要自动商品过期吗?
- 您需要延迟项目吗?
- 您需要物品排序吗?最后值队列?
- 您需要发布和订阅吗?使用多播?
- 您是否需要在单个线程中同时从多个队列中出列?
- 您需要高可用性和/或集群支持吗?
- 你有高通量吗?您需要最佳性能吗?
根据您的要求,Redis 可能适合也可能不适合。但不要指望通过 Redis 获得真正 MOM 的花里胡哨。
最后一点:您提到了 Redis 发布/订阅功能。请注意,这种机制根本不是基于排队系统。无法保证使用 Redis pub/sub 传递消息。如果订阅者不听,则该订阅者的项目将丢失。