RabbitMQ中的核心概念和交换机类型-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录

一、RabbitMQ相关概念

Producer生产者就是投递消息的一方。生产者创建消息然后发布到RabbitMQ中。消息一般可以包含两个部分消息体和附加消息。

  • 消息体在实际应用中消息体一般是一个带有业务逻辑结构的数据比如一个JSON字符串。当然可以进一步对这个消息体进行序列化操作。
  • 附加消息用来表述这条消息比如目标交换器的名称、路由键和一些自定义属性等等。

Broker消息中间件的服务节点。对于RabbitMQ来说一个Broker可以简单地看做一个RabbitMQ服务节点或者RabbitMQ服务实例也可以将Broker看作一台RabbitMQ服务器。

Virtual Host虚拟主机表示交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个vhost本质上就是mini版的RabbitMQ服务器拥有自己的队列、交换器、绑定和权限价值。vhost是AMQP概念的基础必须在连接时指定RabbitMQ默认的vhost是 /

Channel频道或信道是建立在Conection连接智商的一种轻量级的链接。大部分的操作是在Channel这个接口中完成的包括定义队列的生命queueDeclare交换机的生命exchangeDeclare队列的绑定queueBind发布消息basicPublish消费消息basicConsume等。

如果把Connection比作一条光纤电缆的话那么Channel信道就比作成光纤电缆中的其中一束光纤。一个Connection上可以创建任意数量的Channel。

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

Excahge交换器生产者将消息发送到Exchange由交换器将消息路由到一个或多个队列中。如果路由不到或返回给生产者或直接丢弃。
交换机

Queue队列是RabbitMQ的内部对象用于存储消息。
在这里插入图片描述

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

Consumer消费者就是接收消息的一方。消费者连接到RabbitMQ服务器并订阅到队列上。
整体运转流程如下
在这里插入图片描述
在这里插入图片描述生产者发送消息的过程如下

  1. 生产者连接到RabbitMQ Broker建立一个连接(Connection)开启一个信道(Channel)。
  2. 生产者声明一个交换器并设置相关属性比如交换机类型、是否持久化等。
  3. 生产者声明一个队列并设置相关属性比如是否排它、是否持久化、是否自动删除。
  4. 生产者通过路由键将交换器和队列绑定起来。
  5. 生产者发送消息至RabbitMQ Broker其中包含路由键、交换器等信息。
  6. 相应的交换器根据接收到的路由键查找相匹配的队列。
  7. 如果找到则将从生产者发送过来的消息存入相应的队列中。
  8. 如果没有找到则根据生产者配置的属性选择丢弃还是回退给生产者。
  9. 关闭信道、关闭连接。

二、Exchange类型

RabbitMQ常用的交换器类型有fanout、direct、topic、headers这4种。

  • fanout扇形交换机它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中。
    在这里插入图片描述

  • direct直连交换机它会把消息路由到那些BindingKeyRoutingKey完全匹配的队列中。
    在这里插入图片描述

  • topic主题交换机与direct类似但它可以通过通配符进行模糊匹配*.代表匹配一个字符#代表匹配多个字符。

  • headers头交换机不依赖于路由键的匹配规则来路由消息而是根据发送的消息内容中的headers属性进行匹配。 但headers类型的交换器性能很差而且也不实用。


三、RabbitMQ概念模型总结

下面让我们用一幅图来总结一下RabbitMQ中的概念模型所有RabbitMQ对象以虚拟主机区分如下
RabbitMQ概念模型

上面我们介绍了4种交换机Fanout交换机Direct交换机Topic交换机Headers交换机其实还有一种是默认交换机。发送消息时如果只指定了交换机而没有指定队列那么消息会通过默认交换机直接转发到指定的队列中比如上图中的消息1

消息2和消息3发送到了exchange-2上该交换机类型为Direct因此消息2会通过路由key order发送到queue-3上而消息3会通过路由key sms发送到queue-4上。

消息4发送到了exchange-3上该交换机类型为Topic路由key为com.order.create同时满足通配符com.#*.order.*因此消息4会发送到queue-5queue-6上。

消息5发送到了exchange-4上该交换机类型为Headersheader信息为x=1满足匹配条件因此消息5会发送到queue-7上。

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: RabbitMQ