怎样建设门户网站,资源网站不好找了,装饰工程公司经营范围包括哪些?,做货代用的网站一#xff0c;消息堆积
1#xff0c;消费者堆积问题
当生产者生产消息的速度超过了消费者处理消息的速度#xff0c;就会导致消息在队列中进行堆积#xff0c;一定时间后会造成队列达到存储的上限#xff0c;那么最开始进入队列的消息可能变成死信#xff0c;会被丢弃消息堆积
1消费者堆积问题
当生产者生产消息的速度超过了消费者处理消息的速度就会导致消息在队列中进行堆积一定时间后会造成队列达到存储的上限那么最开始进入队列的消息可能变成死信会被丢弃有关死信以及死信消息的处理问题的详细介绍可以看我的另一篇博客RabbitMQ死信交换机、TTL及延迟队列_蜡笔小心眼子的博客-CSDN博客。 2消息堆积的解决方案
解决消息堆积的方案一般是三种
增加更多的消费者多个消费者处于竞争的关系进行消息的消费类似于RabbitMQ的工作模式对于单个消费者来说可以采用线程池的方式进行消息的处理消费者每拿到一个消息的时候就会创建一个线程来处理该消息扩大队列容积提高堆积的上限。
二惰性队列
1惰性队列的特征
惰性队列Lazy Queus一般有如下三个特征
接收到消息后直接存入磁盘而非内存消费者要消费消息时才会从磁盘中读取并加载到内存支持数百万条的消息存储。
2设置惰性队列
2.1 将已经声明的队列设置成惰性队列
设置一个队列为惰性队列只需要在声明队列时指定x-queue-mode属性为lazy即可可以通过命令行将一个运行中的队列修改为惰性队列
rabbitmqctl set_policy Lazy ^lazy-queue$ {queue-mode:lazy} --apply-to queues
2.2 声明队列时将队列设置成惰性队列
Bean方式 Beanpublic Queue lazyQueue() {return QueueBuilder.durable(lazy.queue).lazy()//开启x-queue-mode属性为lazy.build();}
注解方式 RabbitListener(queuesToDeclare Queue(name lazy.queue,durable true,//开启x-queue-mode属性为lazyarguments Argument(name x-queue-mode, value lazy)))public void listenLazyQueue(String msg) {log.info(接收到 lazy.queue的消息{}, msg);}
3惰性队列的优缺点
3.1 优点
基于磁盘存储消息上限高没有间歇性的page-out性能比较稳定。
3.2 缺点
基于磁盘存储消息时效性会降低性能受限于磁盘的IO。