为什么要用消息队列或消息队列的优缺点

为什么要用消息队列(优点)

  1. 解耦:主要是消息中间件的发布订阅功能,多个模块可以订阅一个模块的消息,不过我从来没有做过相关的功能,而我接触到的主要是异步
  2. 异步:对于一次复杂操作可能需要耗时很长,这时候就可以对其进行时序性要求不高的功能进行拆分,通过发送消息来异步执行以提高系统响应速度
  3. 削峰:针对于大并发场景,大量请求到数据库对数据库造成压力,此时可以采用消息队列将请求信息缓存,然后按照数据库承受量对消息进行消费

带来的问题(缺点)

  1. 系统可用性降低:这个很好理解,如果消息服务挂掉,直接会导致整个依赖于消息服务的功能不可用,所以在设计系统时一定要考虑消息服务的高可用,从而提高系统的可用性。
  2. 系统一致性降低:这个是由于生产者发送消息成功后返回通知用户的是成功,而消费者在处理消息时失败了,这时候就会造成系统功能的不一致,所以设计时应该考虑消费失败的问题。
  3. 系统复杂性增高:没有引入时成功就是成功失败就是失败,引入后,就要考虑上面提到的一致性问题,可用性问题,还要考虑消息是否成功发送,消费者是否成功接收到消息这些属于消息的可靠投递问题,还有是否有重复消费的情况这属于幂等消费问题(即同一消息不管重复发送多少次都保证只能被消费一次)

主流消息队列产品

特性activemqrabbitmqrocketmqkafka
开发语言 java erlang java scala
单机吞吐量 万级 万级 十万级 十万级
时效性 毫秒级 微妙级 毫秒级 毫秒级
可用性 高,主从架构 高,主从架构 非常高,分布式 非常高,分布式
消息丢失 低 低 通过参数配置0丢失 通过参数配置0丢失
功能支持 MQ 领域的功能极其完备 基于 erlang 开发,并发能力很强,性能极好,延时很低 MQ 功能较为完善,还是分布式的,扩展性好 功能较为简单,主要支持简单的 MQ 功能,在大数据领域的实时计算以及日志采集被大规模使用

看了很多网上的建议,中小型公司一般建议选择rabbitmq,因为其开源社区且活跃,不会出现太大问题,这样考虑也不无道理,反正我现在的公司也是在用rabbitmq,不过我感觉rocketmq会更好一些,等找时间好好学习一下。

posted @ 2019-12-05 15:31  孤竹夜雨  阅读(1124)  评论(0)    收藏  举报