我正在制作一个发布/订阅典型应用程序,其中发布者向消费者发送消息。
发布者和消费者在不同的计算机上,它们之间的连接偶尔会中断。
此处的目标是确保无论连接发生什么情况或机器本身,发布商发送的消息始终 消费者 >。
消息的排序不是必须的。
根据我的研究,RabbitMQ是这种情况的正确选择:
然而,尽管RabbitMQ有一个关于publish and subscriber的教程,但本教程并没有向我们展示持久性队列,也没有提到confirms,我认为这是确保消息传递的关键。
另一方面,Redis也能够做到这一点:
但我找不到任何正式的教程或示例,我当前的轻描淡写使我相信持久性队列和消息确认必须由我们完成,因为Redis主要是在内存数据存储区而不是像消息代理一样RabbitMQ的。
答案 0 :(得分:14)
我最初想要发布和订阅消息和队列持久性。
理论上,这并不完全适合发布和订阅:
确实,考虑到我的需求,我需要更多的工作队列模式,甚至是RPC模式。
人们说两者都应该很容易,但这确实是主观的。
RabbitMQ总体上有更好的官方文档,在大多数语言中有清晰的例子,而Redis信息主要在第三方博客和稀疏的github repos中 - 这使得它更难找到。
至于这些例子,RabbitMQ有两个例子可以清楚地回答我的问题:
通过混合两者,我可以让发布者向几个消费者发送可靠消息 - 即使其中一个失败了。信息不会丢失,也不会被遗忘。
RabbitMQ的垮台:
至于redis,它在这个博客中有一个很好的持久队列示例:
在官方recommendation之后。您可以查看github repo了解详情。
redis的垮台:
在我看来,这是最糟糕的兔子。
由于以下原因,我最终选择了rabbitmq:
考虑到这一点,对于这个具体案例,我有信心说redis在这种情况下是最糟糕的兔子。
希望它有所帮助。
答案 1 :(得分:0)
我认为它们都很容易使用,因为为它们开发了许多库。
有一些名字如disque,bull,kue,amqplib等...
他们的文件非常好。您可以简单地复制和粘贴,并在几分钟内运行。
我使用seneca
和seneca amqp是一个非常好的例子