在课程或搜索上传的时候,调用对应的方法更改缓存或数据库的这种行为就是消息队列。

一、作用

  1. 可以实现削峰填谷,可以解决短时间内爆发式的请求任务,不使用mq消息队列可能在高并发情况下服务器对响应处理不及时,,使用mq可以把请求咋暂存到消息队列中,然后进行队列执行。

二、可能出现的问题:

1.重复消息

出现的原因:网络故障,消息太多,网络消息阻塞。
原因:1.消息生产者,没有得到消息队列对消息的应答,然后重试机制导致消息重复产生
2.消息已经到达消息队列,发送给消费者的时候,没有收到消费者的恢复消息,或者中间更改了消息状态。

2.解决重复消息

  1. 1.对消息设置唯一标记<br /> 2.幂等操作,无论操作多少次,结果都是确定的<br /> 幂等操作,一是产生一个版本信息,所有信息只有一个版本能成功<br /> 二是设定唯一索引标志,消费者得到消息时以生产者的唯一索引为标准<br /> 还可以把消息的唯一索引放到缓存中间件中,在消费者在消费信息的时候,到缓存中检查是否处理过,也可以提高系统性能

三、几种消息队列的对比

ActiveMQ:早期的消息队列,社区比较成熟,但是性能已经有点落后了,更新也慢,所以不建议用
RabbitMQ:在处理大量数据方面不及RocketMQ 、kafka,但是由于它基于 erlang 开发,并发能力很强,性能极其好,延时很低,达到微秒级,并发量不是很大的话,只有十来万,百万以内,你不用Rabbit你在想啥?
RocketMQ:阿里的开源项目,性能也很好,可以根据自己的需求DIY定制,修改起来得删删改改很多地方,
kafka:功能很少,但吞吐量巨大,毫秒级别的延迟。但是它唯一的缺点就是更容易出现重复消费情况