MQ全称为Message Queue-消息队列,读篇够是了解MQ一种应用程序对应用程序的消息通信,一端只管往队列不断发布信息,读篇够另一端只管往队列中读取消息,了解MQ发布者不需要关心读取消息的读篇够谁,读取消息者不需要关心发布消息的了解MQ是谁,各干各的读篇够互不干扰。 市场上现在常用的了解MQ消息队列有:RabbitMQ、RocketMQ、读篇够Kafka,了解MQActiveMQ。读篇够 使用消息MQ后,只需要保证消息格式不变,了解MQ不需要关心发布者及消费者之间的关系,这两者不需要彼此联系。 在一些不需要即时(同步)的返回结果操作,通过消息队列来实现异步。 在大量请求时(秒杀场景),使用消息队列做缓冲处理,削弱峰值流量,防止系统在短时间内被峰值流量冲垮。 场景:在大量流量涌入高峰,云南idc服务商如数据库只能抗住2000的并发流量,可以使用MQ控制2000到数据库中。 日志存储在消息队列中,用来处理日志,比如kafka。 在还未引进MQ之前,系统只需要关系生产端与消费端的接口一致性就可以了,现在引进后,系统需要关注生产端、MQ与消费端三者的稳定性,这增加系统的负担,系统运维成本增加。 引入了MQ,需要考虑的问题就增加了,如何保障消息的一致性,消费不被重复消费等问题。 A系统发送完消息直接返回成功,但是BCD系统之中若有系统写库失败,则会产生数据不一致的问题。 幂等性:就是云服务器提供商用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 我们先来了解一下产生消息重复消费的原因,对于MQ的使用,有三个角色:生产者、MQ、消费者,那么消息的重复这三者会出现: 在正常情况下,生产者是客户,我们很难避免出现用户重复点击的情况,而MQ是允许存在多条一样的消息,但消费者是不允许出现消费两条一样的数据,所以幂等性一般是在消费端实现的: 状态判断:消费者把消费消息记录到redis中,再次消费时先到redis判断是否存在该数据,存在则表示消费过,直接丢弃。 业务判断:消费完数据后,都是需要插入到数据库中,使用数据库的唯一约束防止重复消费。插入数据库前先查询是否存在该数据,存在则直接丢弃消息,这种方式是比较简单粗暴地解决问题。 在生产端发布消息时,每次法发布消息都把上一条消息的ID记录到消息体中,消费者接收到消息时,做如下操作。 根据消息重要程度,可以分为两种情况处理:一、了解MQ简介
二、了解MQMQ的读篇够优势
(1) 解耦三、MQ的劣势
系统的可用性降低四、常见问题
(1) 怎么保证消息没有重复消费?使用消息队列如何保证幂等性
(2) 消息丢失的情况
(3) 消息的传输顺序性
解决思路(4) 怎么解决百万消息积压问题