MQ对比之RabbitMQ和Redis有什么区别

发布时间:2021-12-24 09:12:49 作者:小新
来源:亿速云 阅读:384

这篇文章将为大家详细讲解有关MQ对比之RabbitMQ和Redis有什么区别,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

消息队列选择:RabbitMQ & Redis

RabbitMQ

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现的产品,RabbitMQ是一个消息代理,从“生产者”接收消息并传递消息至“消费者”,期间可根据规则路由、缓存、持久化消息。“生产者”也即message发送者以下简称P,相对应的“消费者”乃message接收者以下简称C,message通过queue由P到C,queue存在于RabbitMQ,可存储尽可能多的message,多个P可向同一queue发送message,多个C可从同一个queue接收message

RabbitMQ架构:

MQ对比之RabbitMQ和Redis有什么区别

组件:

Redis

Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。

Redis 与其他 key - value 缓存产品有以下三个特点:


Redis 优势

首先Redis的设计是用来做缓存的,但是由于它自身的某种特性使得他可以用来做消息队列(Redis的List数据结构比较适合做MQ)。它有几个阻塞式的API可以使用,正是这些阻塞式的API让他有做消息队列的能力。 另外做消息队列的其他特性,例如FIFO也很容易实现,只需要一个list对象从头取数据,从尾部塞数据即可实现。 Redis能做消息队列得益于它的list对象blpop brpop接口以及Pub/Sub(发布/订阅)的某些接口。他们都是阻塞版的,所以可以用来做消息队列。

RabbitMQ和Redis的简单对比

RabbitMQ和Redis都可以做队列,但是他们还是有区别的。比如,Redis的消息队列,如果在从队列pop出去的时候,worker处理失败的话,数据不会回到队列中,需要从业务中手动把失败的处理数据push到队列中;而RabbitMQ可以自动处理失败的worker使数据不丢失;RabbitMQ还可以保证数据在传输过程中持久化,在通道和队列中的数据可以设置为持久化。首先Redis严格来说并不是消息队列,它是一个内存数据库,不过因为其某些特性适合用来充当队列,所以也多被用于做简单的mq, Redis之父倒是开发了个真正的消息队列disque,有兴趣可以看看。

相比起Redis,RabbitMQ有更加完善的MQ机制,这里我们仅讨论消息的durable(持久性),后续一系列其他机制有时间再交流。

RabbitMQ有一个消息确认机制来保证消息的不丢失:客户端从队列中取出消息之后,可能需要一段时间才能处理完成,如果在这个过程中,客户端出错了,异常退出了,而数据还没有处理完成,那么非常不幸,这段数据就丢失了,因为RabbitMQ默认会把此消息标记为已完成,然后从队列中移除,消息确认是客户端从RabbitMQ中取出消息,并处理完成之后,会发送一个ack告诉RabbitMQ,消息处理完成,当RabbitMQ收到客户端的获取消息请求之后,或标记为处理中,当再次收到ack之后,才会标记为已完成,然后从队列中删除。当RabbitMQ检测到客户端和自己断开链接之后,还没收到ack,则会重新将消息放回消息队列,交给下一个客户端处理,保证消息不丢失,也就是说,RabbitMQ给了客户端足够长的时间来做数据处理。

RabbitMQ demo之生产者消费者

生产者

MQ对比之RabbitMQ和Redis有什么区别

消费者(不发送ack,模拟程序中断)

MQ对比之RabbitMQ和Redis有什么区别


 

no-ack = False,如果消费者遇到情况(its channel is closed, connection is closed, or TCP connection is lost)挂掉了,那么,RabbitMQ会重新将该任务添加到队列中。

正常发送ack的消费者:

MQ对比之RabbitMQ和Redis有什么区别

发送ack则被认为是正常消费message的consumer,则RabbitMQ会把message从队列中移除,此时再看队列中已经没有消息。

关于RabbitMQ的其他features,如 Publish/Subscribe、Routing、Topics和RPC等,有兴趣可以Google。除了RabbitMQ除了Python的实践外,也可考虑其他语言的实践,这里提供另外一个语言golang的选择,可参考Ubuntu14.04+RabbitMQ3.6.3+Golang的最佳实践,这个文章讲的非常详尽,实践意义比较具有参考价值,有兴趣可以阅览一番。

关于“MQ对比之RabbitMQ和Redis有什么区别”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

推荐阅读:
  1. MQ(1)-RabbitMq安装
  2. elasticsearch和redis有什么区别

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

rabbitmq redis

上一篇:RabbitMQ如何高效部署分布式消息队列

下一篇:linux中如何删除用户组

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》