网站推广策划方案,免备案wordpress主机,乐陵德州seo公司,做网页培训1.消息堆积的原因#xff1a; 短时间内出现了大量的数据涌入 消费速度慢 2.解决方案
2.1 预防措施#xff1a;
生产者#xff1a;
减少发布频率#xff0c;考虑使用队列最大长度限制#xff0c;尽可能保证消息都可以被接收。
消费者#xff1a;
增加消费者的处理能力…1.消息堆积的原因 短时间内出现了大量的数据涌入 消费速度慢 2.解决方案
2.1 预防措施
生产者
减少发布频率考虑使用队列最大长度限制尽可能保证消息都可以被接收。
消费者
增加消费者的处理能力优化代码使执行时间更快使用jdk的队列缓存数据多线程去处理要考虑顺序要不然就发生消费顺序的问题了。rabbitmq消费者为单线程串行消费org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer类的concurrentConsumers与txSize对应prefetchCount都是1设置并发消费两个关键属性concurrentConsumers和prefetchCount。concurrentConsumers设置的是对每个listener在初始化的时候设置的并发消费者的个数prefetchCount每次从broker里面取的待消费的消息的个数。
综合
生产者端缓存数据在mq被消费完后再发送到mq打破发送循环条件。设置合适的qos值channel.BasicQos()方法每次从队列拉取的消息数量当qos值被用光而新的ack没有被mq接收时就可以跳出发送循环去接收新的消息。消费者主动block接收进程消费者感受到接收消息过快时主动block利用block和unblock方法调节接收速率当接收线程被block时跳出发送循环。
2.2 事故发生
简单修复
修复consumer的问题让他恢复消费速度然后等待几个小时消费完毕
复杂修复
先修复consumer的问题确保其恢复消费速度 2新建一个topicpartition是原来的10倍临时建立好原先10倍或者20倍的queue数量 3然后写一个临时的分发数据的consumer程序这个程序部署上去消费积压的数据消费之后不做耗时的处理直接均匀轮询写入临时建立好的10倍数量的queue 4接着临时征用10倍的机器来部署consumer每一批consumer消费一个临时queue的数据 5这种做法相当于是临时将queue资源和consumer资源扩大10倍以正常的10倍速度来消费数据 6等快速消费完积压数据之后得恢复原先部署架构重新用原先的consumer机器来消费消息