消息队列

概述

  • 为什么要使用消息队列?
  • 使用了消息队列会有什么缺点?
  • 消息队列如何选型?
  • 如何保证消息队列是高可用的?
  • 如何保证消息不被重复消费?
  • 如何保证消费的可靠性传输?
  • 如何保证消息的顺序性?

为什么要使用消息队列

解耦

异步

削峰

使用了消息队列会有什么缺点

系统可用性降低

系统复杂性增加

消息队列如何选型

中小型软件公司,建议选RabbitMQ

大型软件公司,根据具体使用在rocketMq和kafka之间二选一

如何保证消息队列是高可用的

消息队列的集群模式

如何保证消息不被重复消费 or 如何保证消息队列的幂等性

原因:
网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将该消息分发给其他的消费者

如何保证消费的可靠性传输

其实这个可靠性传输,每种MQ都要从三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据

生产者

发送数据,开启事务

消息队列

持久化数据之后再向生产者确认

消费者

消费成功之后确认消息,不要采用自动确认的消息模式

如何保证消息的顺序性

通过某种算法,将需要保持先后顺序的消息放到同一个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只用一个消费者去消费该队列。
保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路

参考链接

https://mp.weixin.qq.com/s?__biz=MzU0OTE4MzYzMw==&mid=2247484799&idx=1&sn=bc98c5b88a276ce113de633800b6cdb8&chksm=fbb28c81ccc505974e163faf38afc08ecafe6ae3c68b8b3d9993c214650dc7b4fe75c49006ac&mpshare=1&scene=23&srcid=0531L6FSQOszDoWxcyQM1Hfj%23rd