发布/订阅可靠消息:Redis VS RabbitMQ
背景
我正在制作发布者/订阅典型应用程序,发布者将消息发送给消费者。
发布者和消费者位于不同的机器上,它们之间的连接偶尔会中断。
目的
这里的目标是确保无论连接发生了什么,或者机器本身如何,发布者发送的消息总是被消费者接收。
消息的排序不是必须的。
问题
根据我的研究,RabbitMQ是此场景的正确选择:
然而,尽管RabbitMQ有关于发布和订阅者的教程,但本教程并未向我们展示持久队列,也没有提到确认我认为是确保传递消息的关键。
另一方面,Redis也能够做到这一点:
但我找不到任何正式的教程或示例,而我目前的轻描淡写导致我相信持久队列和消息确认必须由我们完成,因为Redis主要是内存数据存储而不是像RabbitMQ这样的消息代理。
问题
背景
我最初希望发布和订阅消息和队列持久性。
这在理论上并不完全适合发布和订阅:
事实上,考虑到我的需求,我需要更多的工作队列模式,甚至是RPC模式。
分析
人们说这两者应该很容易,但这确实是主观的。
RabbitMQ总体上有更好的官方文档,大多数语言都有清晰的例子,而Redis的信息主要在第三方博客和稀疏的github回购中 - 这使得它很难找到。
至于这些例子,RabbitMQ有两个例子可以清楚地回答我的问题:
通过混合两者,我可以让发布者向多个消费者发送可靠消息 - 即使其中一个失败。 消息不会丢失,也不会被遗忘。
rabbitMQ的倒台:
至于redis,它在这个博客中有一个持久队列的好例子:
遵循官方建议。 你可以检查github回购更多的信息。
redis的崩溃:
在我看来,这是一个最糟糕的rabbitmq。
结论
由于以下原因,我最终选择了rabbitmq:
考虑到这一点,对于这个特定情况,我有信心说在这种情况下redis是最差的。
希望能帮助到你。
关于实现,它们都应该很容易 - 它们都有各种语言的库,请在这里查看redis和rabbitmq。 我只是诚实的在这里:我不使用JavaScript,所以我不知道如何实施或支持受尊重的库。
关于你在教程中没有找到的内容(或者在第二篇关于持久队列和持久消息以及确认消息的文章中没有找到),有一些很好的解释:
发布商确认不在本教程中,但在amqp.node的回购中有一个github示例。
随着兔子mq消息传播(在大多数情况下)像这样
publisher -> exchange -> queue -> consumer
并且在每一个站点都有某种持久性要实现。 此外,如果您获得群集和队列镜像,您将获得更高的可靠性(当然还有可用性)。
我认为它们都很容易使用,因为它们都为它们开发了许多库。
有几个名称,如disque,bull,kue,amqplib等...
他们的文件非常好。 您可以简单地复制和粘贴,并在几分钟内运行。
我使用seneca
和seneca amqp是一个很好的例子
https://github.com/senecajs/seneca-amqp-transport
链接地址: http://www.djcxy.com/p/34161.html上一篇: Publish/Subscribe reliable messaging: Redis VS RabbitMQ
下一篇: Memcached vs. Redis?