• rabbitmq 面试题


    1.交换机类型

    RabbitMQ是一个开源的消息队列系统,它支持多种交换机类型,用于在消息的生产者和消费者之间路由和分发消息

    1. Direct Exchange(直接交换机):Direct交换机是最简单的交换机类型之一。它将消息按照消息的Routing Key(路由键)与绑定的队列的Routing Key进行精确匹配,并将消息发送到匹配的队列。这种交换机类型适合于一对一的消息传递。

    2. Fanout Exchange(广播交换机):Fanout交换机将消息广播到绑定到它的所有队列,忽略消息的Routing Key。这种交换机类型适合于一对多的消息广播,不考虑消息的内容。

    3. Topic Exchange(主题交换机):Topic交换机根据消息的Routing Key与绑定的队列的Routing Key之间的通配符匹配规则,将消息发送到一个或多个队列。这允许更复杂的消息路由和过滤。

    2.为什么使用rabbitmq,使用它有什么好处?

    RabbitMQ 是一个流行的消息队列中间件,用于在分布式系统中进行消息传递。

    1. 解耦(Decoupling):
       解耦是指将系统的各个组件或模块之间的依赖降低到最低程度。在消息队列中,解耦意味着生产者(消息发送者)和消费者(消息接收者)之间的通信不需要直接依赖于对方的状态或可用性。生产者只需要将消息发送到队列,而消费者则从队列中获取并处理消息。这种解耦方式允许系统的各个部分独立运作,不会因为某个组件的故障而影响其他组件。

    2. 异步(Asynchronous):
       异步是指不需要立即等待某个操作的完成,而可以继续执行其他操作。在 RabbitMQ 中,生产者可以异步地将消息发送到队列,而消费者可以异步地从队列中获取消息并进行处理。这意味着生产者和消费者之间的交互是非阻塞的,系统可以高效地处理大量的消息,而不会因为等待某个操作完成而陷入停滞。

    3. 削峰(Load Leveling):
       削峰是指在系统中平滑处理突发的高负载,而不会导致系统崩溃或性能下降。在 RabbitMQ 中,削峰通常是通过队列来实现的。当系统的吞吐量超过了某个组件的处理能力时,消息会积压在队列中,等待消费者逐一处理。这种方式可以帮助系统处理高峰时期的流量,而不会造成资源瓶颈。

    总结起来,RabbitMQ 中的解耦异步削峰是一种设计理念,通过消息队列实现了组件之间的解耦,允许异步通信,同时使用队列来削峰,确保系统在高负载情况下稳定运行。这种方式有助于构建可扩展、可靠的分布式系统,提高系统的性能和可维护性。

    3.如何保证消息不丢失的?

    死信队列(Dead Letter Queue): 死信队列用于存储无法被成功处理的消息。当消息无法被消费者处理时,可以将其移动到死信队列,以便进一步的排查和处理。

    1. 消息被拒绝访问,即 RabbitMQ返回 basicNack 的信号时。 或者拒绝basicReject

    2. 消费者发生异常,超过重试次数 。

    3. 消息的 TTL 过期时长或队列过期时间

    4. 消息队列达到最大长度

    4.如何保证消息的正确发送,如何确定接收?

    确保消息的正确发送:

    1. 消息持久化:在发送消息时,将消息标记为持久化,这样即使消息代理(如RabbitMQ)在消息发送后宕机,消息也不会丢失。

    2. 事务:使用事务来确保消息的原子性。在消息发送和确认接收之间,可以将一系列操作包装在事务中。如果事务成功提交,则消息发送,否则它将被回滚。

    3. 发送确认:大多数消息队列系统(包括RabbitMQ)支持生产者端的确认机制。在消息成功发送到队列后,生产者将获得一个确认,以指示消息已经被接收并可靠保存。

    4. 错误处理:处理可能发生的错误情况,如连接断开、消息队列服务不可用等。可以实现重试机制,以确保消息最终被正确发送。

    确定消息的正确接收:

    1. 消息确认:使用消息队列的确认机制来确保消息已被消费者接收。在RabbitMQ中,消费者可以向消息代理发送确认,以告知代理消息已被处理。这种机制确保消息不会被多次处理。

    2. 消费者健壮性:编写健壮的消费者代码,以处理可能的异常情况,如处理失败后的消息重新入队列或记录错误信息。

    3. 消息幂等性:设计消息处理逻辑,以确保多次处理相同消息不会导致不一致的结果。这可以通过消息的唯一标识符或其他方法来实现。

    4. 监控和日志:实施监控和日志记录,以跟踪消息的处理过程。这有助于排除故障和分析问题。

    5. 消息超时:在消息中包含时间戳或超时信息,以确保及时处理消息。如果消息处理时间过长,可以将其标记为超时并采取适当的措施。

    6. 消息重试:在处理失败后,可以将消息重新放入队列以进行重试。您可以设置最大重试次数和重试间隔,以避免无限制的重试。

    7. 监控队列状态:监控消息队列的状态,以检测任何异常情况。您可以使用队列的监控工具或API来实时监视队列的健康状况。

    综上所述,通过正确配置消息队列系统,并采取适当的消息发送和接收策略,可以确保消息的可靠发送和正确接收。这对于构建可靠的分布式系统和微服务架构至关重要。

  • 相关阅读:
    Rocky Linux 配置邮件发送
    【Linux篇<Day14>】——SELinux、破解root密码、防火墙firewall、服务管理systemd
    Eclipse嵌套项目部分项目丢失SVN源信息
    最长公共子序列
    Springboot考勤管理系统30gu6计算机毕业设计-课程设计-期末作业-毕设程序代做
    SaaSpace:8种最佳免费社交媒体监控软件工具
    如何在通用处理器上保障5G物理层控制的实时性
    win 10 强制禁用驱动程序签名
    2024年华为HCIA-DATACOM新增题库(H12-811)
    集成电路工厂用什么ERP?哪家的集成电路ERP比较好
  • 原文地址:https://blog.csdn.net/qq_52963857/article/details/132868867