# 核心概念

# 生产者 Producer

生产消息,然后发布到MQ中。消息一般分为两部分:消息体和标签。

消息体也可以称之为payload,在实际应用中,消息体一般为一个JSON格式字符串。
消息标签用来表述这条消息,比如一个交换器的名称和一个路由键。

RabbitMQ根据标签把消息发送给感兴趣的消费者当中。

# 消费者 Consumer

连接到RabbitMQ,并订阅到队列上,当消费者消费一条消息时,只是消费消息的消息体(payload)。在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者也只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道。

# Broker 消息中间件的服务节点

对于RabbitMQ来说,一个RabbitMQ Broker可以简单地看作一个RabbitMQ服务节点,或者RabbitMQ服务实例。大多数情况下也可以将一个RabbitMQ Broker看作一台RabbitMQ服务器。

![Borker流程](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/bfee805a9c734185afe6e783a571da1d~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?)

# Queue 队列

RabbitMQ 的内部对象,用于存储消息

RabbitMQ中消息都只能存储在队列中,这一点和Kafka这种消息中间件相反。Kafka将消息存储在  topic(主题)这个逻辑层面,而相对应的队列逻辑只是  topic 实际存储文件中的位移标识。RabbitMQ的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。

# Exchange 交换器

生产者将消息发送到Exchange(交换器),由交换器将消息路由到一个或者多个队列当中,如果路由不到或许会返还给生产者,或许直接丢弃。

# RoutingKey 路由键

生产者将消息发给交换器的时候,一般会指定一个RoutingKey,用来指定这个消息的路由规则,而这个Routing Key需要与交换器类型和绑定键(BindingKey)联合使用才能最终生效。在交换器类型和绑定键(BindingKey)固定的情况下,生产者可以在发送消息给交换器时,通过指定RoutingKey来决定消息流向哪里。

# Binding 绑定

RabbitMQ 中通过绑定将交换器与队列关联起来,在绑定的时候一般会指定一个绑定键(BindingKey),这样RabbitMQ就知道如何正确地将消息路由到队列了。

生产者将消息发送给交换器时,需要一个RoutingKey,当BindingKey和RoutingKey相匹配时,消息会被路由到对应的队列中。在绑定多个队列到同一个交换器的时候,这些绑定允许使用相同的BindingKey。BindingKey并不是在所有的情况下都生效,它依赖于交换器类型,比如fanout类型的交换器就会无视BindingKey,而是将消息路由到所有绑定到该交换器的队列中。