15

很长一段时间我们都在使用 msmq 和 redis queue ( IRedisList)。几个月前,我们开始尝试 redis pub-sub 。

我们的应用程序有 20 多个服务,它们从队列中读取消息或使用 redis 订阅频道。我们还有十多个向他们发送消息的队列。该应用程序是多线程的。

那我想从你这里得到什么?

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

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

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

4

1 回答 1

33

IMO,您正在尝试在这里比较苹果和橙子。

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

Redis 是一个快速的内存数据结构服务器,您可以在其上构建队列系统。使用 Redis 正确实现 MSMQ 的基本功能已经是一项艰巨的任务。可能根本不可能实现高级功能(如分发事务支持)。

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

  • 你需要坚持吗?
  • 您需要交易支持吗?
  • 你需要分布式事务支持吗?
  • 您是否需要“一次且仅一次”的交付语义?最多一次?至少一次?
  • 您是否需要多个重试策略(线性延迟、指数退避等...)?
  • 你需要异常/死队列吗?
  • 您需要保留物品吗?
  • 您需要队列浏览支持吗?队列管理功能?
  • 您需要项目优先级管理吗?
  • 您需要自动物品过期吗?
  • 您需要延迟项目吗?
  • 您需要物品排序吗?最后值队列?
  • 你需要发布和订阅吗?多播?
  • 您是否需要在单个线程中同时从多个队列中出列?
  • 您需要高可用性和/或集群支持吗?
  • 你有高通量吗?你需要最好的性能吗?

根据您的要求,Redis 可能适合也可能不适合。但不要指望通过 Redis 获得真正 MOM 的花里胡哨。

最后一点:您提到了 Redis 发布/订阅功能。请注意,这种机制根本不是基于排队系统。无法保证使用 Redis pub/sub 传递消息。如果订阅者不听,则该订阅者的项目将丢失。

于 2013-10-23T15:51:06.420 回答