红米 Pub/Sub vs Rabbitmq

Redis Pub/Sub vs Rabbit MQ

我的团队想迁移到微服务架构。目前,我们正在使用 Redis Pub/Sub 作为我们系统某些遗留部分的消息代理。我的同事认为继续使用 Redis 作为服务总线是很自然的,因为他们不想花时间研究新产品。但在我看来,RabbitMQ(尤其是 MassTransit)是一种更好的微服务方法。您能否将 Redis Pub/Sub 与 Rabbit MQ 进行比较,并为我提供一些关于 Rabbit 的参数?

RabbitMQ 在传递消息方面远比 Redis 稳定和健壮。

RabbitMQ 能够保存并存储 一条消息,如果它没有消费者(例如你的监听器崩溃等)。

RabbitMQ 有不同的通信方法:Pub/Sub,队列。您可以用于负载平衡等

Redis对于简单的情况很方便。如果您可以承受丢失消息的后果并且不需要队列,那么我认为 Redis 也是一个不错的选择。 但是,如果您不能承受丢失消息的后果,那么 Redis 不是一个好的选择。

Redis 是一种具有可选持久性的快速内存键值存储。 Redis 的 pub/sub 特性是 Redis 作为产品的边缘案例。

RabbitMQ 是消息代理,什么都不做。它针对可靠的消息传递进行了优化,包括命令样式(发送到端点 exchange/queue)和发布-订阅。 RabbitMQ 还包括管理插件,它提供了一个有用的 API 来监控代理状态、检查队列等等。

在低级别的 Redis 客户端上处理 Redis pub/sub 可能是一个非常痛苦的经历。您可以使用像 ServiceStack 这样具有更高级别抽象的库,使其更易于管理。

但是,与通过 RMQ 进行原始消息传递相比,MassTransit 增加了很多价值。一旦您真正开始做事,无论您决定使用哪种传输方式,您都会遇到与消息传递相关的典型问题,例如处理回复、调度、长 运行 进程、重新交付、死机-字母队列和毒队列。 MassTransit 为您做这一切。 Redis 或 RMQ 客户端都不会提供任何这些。如果您的团队想花时间在他们自己的代码中处理这些问题——那更像是重新发明轮子。在这种情况下使用 "not willing to learn a new product" 的论点听起来有点奇怪,因为开发人员不想为产品提供价值,而是想把时间花在处理基础架构问题上。