响应式网站开发视频,北京网站建设机构,微商城网页版,网站开发与应用专业前面解决了消息的可靠性、消息的延迟问题#xff0c;下面研究一下消息的堆积的问题#xff1a; #xff08;1#xff09;消息堆积问题 消息产生堆积#xff0c;上限后#xff0c;最早的消息成为死信#xff0c;有消息被丢弃#xff0c;这对安全性较高的业务中是不行的…前面解决了消息的可靠性、消息的延迟问题下面研究一下消息的堆积的问题 1消息堆积问题 消息产生堆积上限后最早的消息成为死信有消息被丢弃这对安全性较高的业务中是不行的需要去解决消息堆积的问题。 前两种是消费者角度第三种是队列的角度 提高队列的容积可以缓解消息堆积问题
开启线程池也是有限制的如果消息很多需要开启很多很多线程开启的线程很多对cpu是一种浪费cpu需要在多个线程之间做上下文的切换因此这种方案适合这个消息处理的业务耗时比价长的情况可以开多个线程cpu可以并行处理多个业务
我们下面将一下第三种扩大队列的容积
2惰性队列
我们知道MQ的队列是内存存储的如果说在高并发的情况下消息量非常大达到数百万这些消息都给他扔到内存中显然是不合适的我们要学习惰性队列去解决这个问题 对于传统的对类来讲如果你没有开启消息的持久化所有的消息都是在内存中的其目的是加快消息投递的速度优势就是响应速度快也有一个问题就是在内存中存储有一个上限 mq会设置一个内存的预警值默认40%如果在消息堆积的情况下很容易达到消息的预警此时mq就会处于一个暂停状态会阻止生产者投递消息进来会给这部分消息刷出到磁盘清理一部分内存空间这个动作叫做快照所以呢会导致mq处于间歇性的暂停状态组织用户写入请求所以mq的并发能力处于波浪形的忽高忽低的情况性能不够稳定
惰性队列会把请求直接写入磁盘很难触发mq的预警性能会比较稳定但是写磁盘性能不如内存会带来一定的读写延迟 但是也再可以接收的范围内消费者消费消息再从磁盘读带来的还是性能损耗带来延迟
把对列变成惰性队列有两种 消费者 发送者 惰性对列直接到磁盘 普通队列先发到内存达到预警刷出到磁盘