RabbitMQ

1.什么是 RabbitMQ

RabbitMQ 是一个开源的消息队列。RabbitMQ 可以让应用程序在分布式环境下进行异步通信,从而实现解耦和高可用性。它采用生产者-消费者模式来处理消息,并提供了许多高级特性,如消息确认、消息持久化、消息过期等。

也可能直接问什么是消息队列?消息队列就是一个使用队列来通信的组件。

2.RabbitMQ 的特点?

  • 可靠性: RabbitMQ 使用一些机制来保证可靠性, 如持久化、传输确认及发布确认等。

  • 灵活的路由 : 在消息进入队列之前,通过交换器来路由消息。对于典型的路由功能, RabbitMQ 己经提供了一些内置的交换器来实现。针对更复杂的路由功能,可以将多个交换器绑定在一起, 也可以通过插件机制来实现自己的交换器。

  • 扩展性: 多个 RabbitMQ 节点可以组成一个集群,也可以根据实际业务情况动态地扩展 集群中节点。

  • 高可用性 : 队列可以在集群中的机器上设置镜像,使得在部分节点出现问题的情况下队 列仍然可用。

  • 多种协议: RabbitMQ 除了原生支持 AMQP 协议,还支持 STOMP, MQTT 等多种消息 中间件协议。

  • 多语言客户端 :RabbitMQ 几乎支持所有常用语言,比如 Java、 Python、 Ruby、 PHP、 C#、 JavaScript 等。

  • 管理界面 : RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息、集 群中的节点等。

  • 插件机制 : RabbitMQ 提供了许多插件 , 以实现从多方面进行扩展,当然也可以编写自 己的插件。

3.RabbitMQ 核心概念?

RabbitMQ 的整体模型架构如下:

3.1 生产者和消费者

  • 生产者(publisher:生产消息的一方

  • 消费者(consumer:消费消息的一方

消息一般由 2 部分组成:消息头(或者说是标签 Label)和 消息体

  • 消息体也可以称为 payLoad,消息体是不透明的,

  • 而消息头则由一系列的可选属性组成,这些属性包括 routing-key(路由键)、priority(相对于其他消息的优先权)、delivery-mode(指出该消息可能需要持久性存储)等。生产者把消息交由 RabbitMQ 后,RabbitMQ 会根据消息头把消息发送给感兴趣的 Consumer(消费者)。

3.2 交换机

Exchange(交换器) 用来接收生产者发送的消息并将这些消息路由给服务器中的队列,如果路由不到,或许会返回给 Producer(生产者) ,或许会被直接丢弃掉 。RabbitMQ 的 Exchange(交换器) 有 4 种类型,不同的类型对应着不同的路由策略:direct(默认)、fanout、topic、headers,不同类型的 Exchange 转发消息的策略有所区别。

RabbitMQ_第1张图片

RoutingKey(路由键):生产者将消息发给交换器的时候,一般会指定一个 RoutingKey(路由键),用来指定这个消息的路由规则,而这个 RoutingKey 需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效。

BindingKey(路由键):BindingKey 用来将交换器和消息队列连接起来。Exchange 和 Queue 的绑定可以是多对多的关系。

交换机类型

RabbitMQ 常用的 Exchange Type 有 fanoutdirecttopicheaders 这四种,每种交换机的路由规则去Guide看吧。

3.3 消息队列

Queue(消息队列) 用来保存消息直到发送给消费者。一个消息可投入一个或多个队列。消息会一直在队列里面,等待消费者连接到这个队列将其取走。

多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,这样避免消息被重复消费。

3.4 Broker

可以将一个 RabbitMQ Broker 看作一台 RabbitMQ 服务器。RabbitMQ Broker 是 RabbitMQ 消息中间件的核心部分,它通过队列、交换机和绑定等机制实现了消息的路由和传递,确保了生产者和消费者之间的可靠通信,它还提供了诸如消息持久化、消息确认、消息过期等功能。

4.AMQP 是什么?

AMQP 是一种开放的、标准化的消息协议,用于消息中间件系统之间的通信。RabbitMQ 就是 AMQP 协议的具体实现。RabbitMQ 中的交换器、交换器类型、队列、绑定、路由键等都是遵循的 AMQP 协议中相应的概念实现的。

5.说说生产者 Producer 和消费者 Consumer?

生产者:消息生产者,就是投递消息的一方。消息一般包含两个部分:消息体和标签。

消费者:消费消息,也就是接收消息的一方。消费者连接到 RabbitMQ 服务器,并订阅到队列上。消费消息时只消费消息体,丢弃标签。

你可能感兴趣的:(#,Java面试八股文,rabbitmq,分布式)