背景
我正在制作一个发布/订阅典型应用程序,其中发布者向消费者发送消息。
发布者和消费者在不同的机器上,他们之间的连接偶尔会中断。
客观的
这里的目标是确保无论连接或机器本身发生什么情况,发布者发送的消息 总是 被 消费者 接收到。
消息的排序不是必须的。
问题
根据我的研究,RabbitMQ 是这种场景的正确选择:
然而,尽管 RabbitMQ 有一个关于 发布和订阅者 的教程,但是这个教程并没有向我们展示持久队列,也没有提到 确认,我认为这是确保消息被传递的关键。
另一方面,Redis 也有能力做到这一点:
但我找不到任何官方教程或示例,我目前的轻描淡写让我相信持久队列和消息确认必须由我们完成,因为 Redis 主要是内存数据存储,而不是像 RabbitMQ 这样的消息代理。
问题
- 对于这个用例,哪种解决方案最容易实施? (Redis 方案还是 RabbitMQ 方案?)
- 请提供您认为最好的示例的链接!
原文由 Flame_Phoenix 发布,翻译遵循 CC BY-SA 4.0 许可协议
背景
我最初想要发布和订阅消息和队列持久性。
这在理论上并不完全适合发布和订阅:
事实上,从我的需求来看,我需要更多的工作队列模式,甚至是 RPC 模式。
分析
人们说两者都应该很容易,但这确实是主观的。
RabbitMQ 总体上有更好的官方文档,在大多数语言中都有清晰的示例,而 Redis 信息主要在第三方博客和稀疏的 github 存储库中——这使得它很难找到。
至于示例,RabbitMQ 有两个示例可以清楚地回答我的问题:
通过混合这两者,我能够让一个发布者向多个消费者发送可靠的消息——即使其中一个失败了。消息不会丢失,也不会被遗忘。
rabbitMQ 的垮台:
至于redis,它在这个博客中有一个持久队列的很好的例子:
遵循官方 推荐。您可以查看 github 存储库 以获取更多信息。
redis的垮台:
在我看来,这是最糟糕的 rabbitmq。
结论
由于以下原因,我最终选择了 rabbitmq:
考虑到这一点,对于这种特定情况,我有信心说在这种情况下,redis 是最差的 rabbitmq。
希望能帮助到你。