Redis队列 vs MSMQ

15

长期以来,我们一直在使用 MSMQ 和 Redis 队列(IRedisList)。 几个月前,我们开始尝试 Redis 发布-订阅。

我们的应用程序有多达二十个服务从队列中读取消息或者通过 Redis 订阅到频道。 我们还有超过十个队列,可以向它们发送消息。 该应用程序是多线程的。

那么我希望你能做什么呢?

现在我们有时间来决定我们想要使用哪种类型的队列以及想要用不同类型的队列替换哪些队列。

我试图寻找 MSMQ VS Redis 的帖子,但没有找到足够的信息。

有人能就这个问题给我建议吗?

1个回答

33

我认为你在这里是在比较不同的东西。

MSMQ是一种企业级MOM(面向消息的中间件,即排队系统),提供持久性、事务支持和丰富的功能。

Redis是一个快速的内存数据结构服务器,可以在其上构建排队系统。使用Redis实现MSMQ的基本特性已经是一个困难的任务,可能根本无法实现高级特性(如分布式事务支持)。

我建议尝试列出您期望从队列系统中获得的属性:

  • 您需要持久性吗?
  • 您需要事务支持吗?
  • 您需要分布式事务支持吗?
  • 您需要“一次且仅一次”交付语义吗?最多一次?最少一次?
  • 您需要多个重试策略(线性延迟、指数回退等)吗?
  • 您需要异常/死信队列吗?
  • 您需要项目保留吗?
  • 您需要队列浏览支持吗?队列管理能力?
  • 您需要项目优先级管理吗?
  • 您需要自动项目过期吗?
  • 您需要延迟项目吗?
  • 您需要项目排序吗?最后值队列?
  • 您需要发布和订阅吗?带有多播?
  • 您需要在单个线程中从多个队列中出队吗?
  • 您需要高可用性和/或集群支持吗?
  • 您的吞吐量很高吗?您需要最佳性能吗?

根据您的要求,Redis可能是一个合适的选择,但不要期望使用Redis获得真正MOM的功能。

最后一点:您提到了Redis的pub/sub功能。请注意,这种机制与排队系统完全无关。Redis pub/sub不能保证消息的交付。如果订阅者没有监听,该条目将会丢失。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接