做网站赚钱平台,湘潭关键词优化报价,免费优化网站,怎样把已经有的网站做推广RabbitMQ中的消息堆积问题
当生产者发送消息的速度超过了消费者处理消息的速度#xff0c;就会导致队列中的消息堆积#xff0c;直到队列存储消息达到上限。之后发送的消息就会成为死信#xff0c;可能会被丢弃#xff0c;这就是消息堆积问题。
解决消息堆积有三种种思路…RabbitMQ中的消息堆积问题
当生产者发送消息的速度超过了消费者处理消息的速度就会导致队列中的消息堆积直到队列存储消息达到上限。之后发送的消息就会成为死信可能会被丢弃这就是消息堆积问题。
解决消息堆积有三种种思路
增加更多消费者提高消费速度在消费者内开启线程池加快消息处理速度采用惰性队列扩大队列容积提高堆积上限
惰性队列
惰性队列的特征如下
接收到消息后直接存入磁盘而非内存所以可以支持数百万条的消息存储消费者要消费消息时才会从磁盘中读取并加载到内存性能较稳定但是受限于磁盘IO时效性会降低。
实现惰性队列只需要在声明队列的时候设置属性x-queue-mode为lazy。
面试不需要掌握本人存档用的
声明队列时 如果是用的注解的话如下
RabbitMQ高可用性和强一致性机制
RabbitMQ有三种集群模式普通集群、镜像集群、仲裁队列
普通集群
普通集群或者叫标准集群classic cluster 会在集群的各个节点间共享部分数据包括交换机、队列元信息实际上就是队列的地址引用。不包含队列中的消息。
所以队列所在节点宕机队列中的消息就会丢失。为此出现了镜像集群。
镜像集群
镜像集群本质是主从模式具备下面的特征
交换机、队列、队列中的消息会在各个mq的镜像节点之间同步备份。创建队列的节点被称为该队列的主节点备份到的其它节点叫做该队列的镜像节点。一个队列的主节点可能是另一个队列的镜像节点所有操作都是主节点完成然后同步给镜像节点主节点宕机后镜像节点会替代成新的主节点。
但是也可能出现主节点还未来得及同步数据给镜像节点就宕机从而导致数据丢失的情况。虽然该情况概率比较小但是某些情况我们需要保证数据的强一致性为此出现了仲裁队列。
仲裁队列
仲裁队列是3.8版本以后才有的新功能用来替代镜像队列具备下列特征
与镜像队列一样都是主从模式支持主从数据同步使用非常简单没有复杂的配置主从同步基于Raft协议强一致
其中的Raft协议就保证了数据的强一致性不过与之相对的是性能会降低些。 目前使用最多的还是镜像集群。
问题及回答模板
如果有100万消息堆积在MQ , 如何解决 ?
回答背熟以下回答大概用时1min
我在实际的开发中没遇到过这种情况不过如果发生了堆积的问题解决方案也所有很多的。 第一我们可以使用多线程消费任务。 第二我们可以增加更多消费者提高消费速度 。 第三我们可以扩大队列容积提高堆积上限 。譬如可以使用RabbitMQ惰性队列惰性队列与普通队列不同的主要是接收到消息后直接存入磁盘而非内存只有消费者要消费消息时才会从磁盘中读取并加载到内存。基于这个性质使得它可以支持数百万条的消息存储。
RabbitMQ的高可用机制有了解过嘛、
回答背熟以下回答大概用时1min
候选人
嗯熟悉的~
我们当时项目在生产环境下使用的集群当时搭建是镜像模式集群使用了3台机器。
镜像队列结构是一主多从所有操作都是主节点完成然后同步给镜像节点如果主节点宕机后镜像节点会替代成新的主节点不过在主从同步完成前主节点就已经宕机可能出现数据丢失
面试官那出现丢数据怎么解决呢
候选人
我们可以采用仲裁队列与镜像队列一样都是主从模式支持主从数据同步主从同步基于Raft协议保证了数据的强一致。并且使用起来也非常简单不需要额外的配置在声明队列的时候只要指定这个是仲裁队列即可。