zoukankan      html  css  js  c++  java
  • 面试题之RabbitMQ

    你用RabbitMQ的那些功能?做了些什么?

     消息队列 

     RabbitMQ和Kafaka区别?

     

     

     RabbitMQ有哪些模式:

    1)工作队列:给多个队列发送消息

    2)发布/订阅

    3)简单模式

     RabbitMQ重复消费如何处理?消息一致性如何解决?

    1)保证接口幂等

         如何做幂等: 1、利用数据库唯一键约束 2、为更新的数据设置前置条件 3、token机制,发送的消息设置全局唯一标识,每次消费前要检查这个唯一标识是否已经存在于cache或者db里面,若不存在这放入,然后开始业务处理

    2)本地记录消息发送状态,已发送的不再发送

    3)已发送的消息保存到redis,判断是否已经存在

     RabbitMQ的优缺点?

    优点:

    1)解耦(推送机构,A,B,C 那天在来个E 再写一套,那天不需要了需要删除代码,不需要了你不监听队列就ok了),

    2)异步(推送机构A发送B,C,D接收),A->B->C B->C 需要500s 那么A就需要等待500s ,只要放到队列里面,不需要同步等待处理结果

    3)削峰(大量用户请求,每秒5000个请求数据库,数据库承受不了太大压力)用户-RabbitMQ-Mysql ,放到队列慢慢消费

    缺点:

    1)系统可用性降低(外部依赖越多,越容易挂掉) 如何实现高可用?普通集群 (消息发送待一台机器上,有其他消息去同步消息到本机器上面),镜像集群(发送消息同步到每台机器上)

    2)系统复杂度提高 (如何保证重复消费,如何处理消息丢失,如何保证消息顺序行) 

    3)一致性问题(A->B->C)A处理成功B,C处理失败,数据不一致 

    RabbitMQ为什么会导致消息丢失?

    1)produer写消息异常,消息未写入队列?如何解决?

         1 写消息失败异常重试 2 开启事务 3异步确认 有消费者告诉producer是否ACK 或者NACK (消费者回调)

    2)cousumer接收到消息后,还没消费或者持久化到硬盘,RabbitMQ就挂了,消息在内存中丢失

         消费者关闭手动确认消息模式,手动发送ACK(具体处理成功后,如写mysql成功后在发送ACK)

    3)RabbitMQ本身丢失消息

       做消息持久化,将消息保存到本地

     

     

     如何保证消息顺序执行?

    多个消费者,每个消费者有单独的quue

    5 Producer如何保证消息不丢失?

    1) trt catch 在 重试发送消息

    2)开启事务模式

     3 )异步Confirm模式

     RabbitMQ本身如何保证消息不丢失?

      

     消费者如何保证消息不丢失?

    消费者宕机如何保证消息不丢失?

  • 相关阅读:
    深度学习与非线性
    浅谈Class Activation Mapping(CAM)
    如何形象又有趣的讲解对抗神经网络(GAN)是什么?
    X86生态圈为什么在物联网玩不转?什么是Intel® FSP ?它能解决什么问题?
    关于哈希的最通俗的解说
    2020新年快乐,抛弃所有不顺,大步向前
    读心术的方法--多体素模式分析(MVPA)
    Cross-Multimedia dataset
    Word2Vec详解
    解决Error:Could not determine the class-path for interface com.android.builder.model.AndroidProject.
  • 原文地址:https://www.cnblogs.com/fanBlog/p/12201472.html
Copyright © 2011-2022 走看看