RabbitMQ基础核心概念

目标:

了解RabbitMQ的核心概念


学习步骤:

1、模型概念
2、Producer (生产者) 、 Consumer(消费者)
3、Exchange (交换机)
4、Queue (消息队列)
5、Broker(服务节点)
6、RabbitMQ的五种工作模式

一、模型概念

RabbitMQ基础核心概念_第1张图片

说白了,RabbitMQ 就是一个生产者与消费者模型,其功能主要是【接收、存储和转发消息】,也可以称为一个使用队列来通信的组件。

二、 Producer(生产者) 、 Consumer(消费者)

Producer(生产者) :顾名思义是生产消息的一方

Consumer(消费者) :顾名思义是消费消息的一方

而消息一般由 俩部分组成:消息头(标签 Label)和 消息体(payload)。

消息体也叫 payLoad ,其内容是不外传的。
而消息头则由一系列的可选属性组成,这些属性包括

  • routing-key(路由键)
  • priority(优先级)
  • delivery-mode(用于做消息持久化)。

Producer 把消息交由 RabbitMQ 后,RabbitMQ 会根据消息头把消息发送给合适的 Consumer

三、Exchange(交换机)

生产者发送的消息都需要经过交换机才能到达合适的消费者,且交换机只负责转发消息,不具备存储消息的能力,假设没有任何队列与交换机绑定,或者没有符合路由规则的队列,发的消息就很可能会丢失。

说细节一点的话就是 Exchange用来接收生产者发送的消息并将这些消息路由给服务器中的队列中,如果找不到对应的路由

  • 情况一是:消息返回给 Producer。
  • 情况二是:消息直接被丢弃掉 。

关于Exchange 有4种类型,不同的类型对应着不同的路由策略,分别是:

RabbitMQ基础核心概念_第2张图片

  • direct (定向,也叫路由模式 - 默认)

    • 交换机 会把消息 路由到那些 Bindingkey 与 RoutingKey 完全匹配的 Queue 中
    • 应用场景:direct 类型常用在处理有优先级的任务,根据任务的优先级把消息发送到对应的队列,这样可以指派更多的资源去处理高优先级的队列。
      RabbitMQ基础核心概念_第3张图片
  • fanout (广播,也称订阅模式)

    • 交换机 会把所有发送到该 Exchange的消息 路由到所有与它绑定的Queue中,fanout 类型是所有的交换机类型里面速度最快的
      RabbitMQ基础核心概念_第4张图片
  • topic (通配)

    • topic类型的交换机在匹配规则上进行了扩展,RoutingKey 为一个点号“.”分隔的字符串,BindingKey 也是点号“.”分隔的字符串
    • BindingKey 中有两种特殊字符串*#,用于模糊匹配,其中*用于匹配一个单词,#用于匹配零个或多个单词
      RabbitMQ基础核心概念_第5张图片
  • headers (参数匹配)

    • 它不依赖于路由键的匹配规则来路由消息 ,而是根据发送的消息内容中的 headers 属性进行匹配
    • 它在绑定队列和交换机时指定一组键值对,当发送消息到交换机时,RabbitMQ会获取到该消息的 headers,对比其中的键值对是否完全匹配队列和交换机绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列
    • headers 类型的交换机性能很差,不太实用

注:BindingKey 并不是在所有的情况下都生效,它依赖于交换机类型,比如 fanout类型的交换机就会无视(路由键为空字符串),将消息路由到所有绑定到该交换机的队列中

四、Queue(消息队列)

Queue 是用来保存消息 发送给消费者的一个消息容器(内部对象)。一个消息可投入一个或多个队列。消息会一直待在队列里,等待消费者连接到这个队列将消息取走

五、Broker(服务节点)

一个broker 其实就是相当于一个RabbitMQ服务实例。

六、RabbitMQ的五种工作模式

1、简单模式

RabbitMQ基础核心概念_第6张图片

2、work 工作模式

RabbitMQ基础核心概念_第7张图片
在这里插入图片描述

3、pub/sub 发布订阅模式

RabbitMQ基础核心概念_第8张图片

4、Routing 路由模式

RabbitMQ基础核心概念_第9张图片

5、Topic 通配模式

RabbitMQ基础核心概念_第10张图片

五种工作模式总结

RabbitMQ基础核心概念_第11张图片

你可能感兴趣的:(#,RabbitMQ,java-rabbitmq,rabbitmq,java)