• 【Java面试题】这道经典面试题,RabbitMQ的消息如何实现路由,怎么回答才能镇住面试官


    大家好,我是Mic,一个没有才华只能靠颜值混饭吃的Java程序员。

    今天分享的这个面试题,没什么特别复杂和特殊的地方。

    就是一个RabbitMQ里面的普通面试题;

    这个问题一般是去互联网公司里面 去考察3~5年的求职者。

    问题是: “RabbitMQ的消息如何实现路由”?

    高手部分的回答已经整理到了10W字的面试文档里面,大家可以扫描文章尾端二维码领取。

    下面看看高手的回答

    大家记得点赞、收藏加关注!!!

    需要高手面试文档面试文档的小伙伴可以扫描文章底部二维码

    高手:

    RabbitMQ是一个基于AMQP协议实现的分布式消息中间件。

    AMQP的具体工作机制是,生产者把消息发送到RabbitMQ Broker上的Exchange交换机上。

    Exchange交换机把收到的消息根据路由规则发给绑定的队列(Queue)。

    最后再把消息投递给订阅了这个队列的消费者,从而完成消息的异步通讯。

    其中,Exchange是一个消息交换机,它里面定义了消息路由的规则,也就是这个消息路由到那个队列。

    然后Queue表示消息的载体,每个消息可以根据路由规则路由到一个或者多个队列里面。

    而关于消息的路由机制,核心的组件是Exchange。

    它负责接收生产者的消息然后把消息路由到消息队列,而消息的路由规则由ExchangeType和Binding决定。

    Binding表示建立Queue和Exchange之间的绑定关系,每一个绑定关系会存在一个BindingKey。

    通过这种方式相当于在Exchange中建立了一个路由关系表。

    生产者发送消息的时候,需要声明一个routingKey(路由键),Exchange拿到routingKey之后,根据RoutingKey和路由表里面的BindingKey进行匹配,而匹配的规则是通过ExchangeType来决定的。

    在RabbitMQ中,有三种类型的Exchange:direct ,fanout和topic。

    • direct: 完整匹配方式,也就是Routing key和Binding Key完全一致,相当于点对点的发送。

    • fanout: 广播机制,这种方式不会基于Routing key来匹配,而是把消息广播给绑定到当前Exchange上的所有队列上。

    • topic: 正则表达式匹配,根据Routing Key使用正则表达式进行匹配,符合匹配规则的Queue都会收到这个消息

    总结

    RabbitMQ、Kafka、RocketMQ是目前最主流的分布式消息中间件了。

    有的同学可能对kafka比较了解,有的同学可能对RabbitMQ比较了解。

    不过,在面试的时候,面试官一般会问你用过的技术组件。

    通过面试过程中推演出你的学习能力以及对技术的掌握能力,这个方面如果还不错的话,接触一个新的MQ组件所消耗的学习成本会比较小。

    另外,我将所有Java面试系列制作成了完整的面试文档。它的便捷之处在于,可以通过检索的方式,找到你想要的面试题,目前已经更新180期,总计超过15W字!

    【想领取面试文档的小伙伴可以点击文章底部名片无套路免费赠送给大家!】

    需要高手面试文档面试文档的小伙伴可以扫描下方二维码
    ↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 相关阅读:
    mysql 提示Index column size too large. The maximum column size is 767 bytes.
    golang之并发编程
    SQL sever中的存储过程
    java基础详解1----package引入&CLASSPATH
    通过字符设备驱动的分步实现编写LED驱动,另外实现特备文件和设备的绑定
    攻防世界-web-Training-WWW-Robots
    山西电力市场日前价格预测【2023-10-22】
    vue3在main.js里面定义全局函数,然后其他页面使用
    构建动态交互式H5导航栏:滑动高亮、吸顶和锚点导航技巧详解
    【Push Kit】推送返回80100016错误
  • 原文地址:https://blog.csdn.net/q331464542/article/details/126265597