Rabbit的基础概念

本是古典 何须时尚 2024-04-18 20:32 161阅读 0赞

作为金融级必选的消息中间件,RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能等特性受到越来越多企业的青睐,本篇文章简单介绍一下在初次学习RabbitMQ时涉及的一些基础的概念以及名词的解释

首先看一下RabbitMQ的消息流转图:

640?wx\_fmt=png

简单解释一下上方涉及的几个组件

Producer生产者

消息发送方,生产者创建消息,然后发布到 RabbitMQ 中

消息

一个消息一般是由两部分组成的:消息体和标签

  • 消息体也可以称之为 payload ,就是我们需要MQ为我们传输的消息,例如JSONString、String、Byte等。
  • 标签:消息的详细参数, 比如目的交换器名称、路由键、延时时间等

Broker

可以看作 RabbitMQ 服务

交换器Exchange

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

RabbitMQ 常用的交换器类型有 anout、direct、topic、headers

  • fanout会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中
  • direct类型的交换器会把消息路由到那些BindingKey和RoutingKey完全匹配的队列中
  • topic与direct类型的交换器相似也是将消息路由到BindingKey RoutingKey相匹配的队列中但是与direct 类型不同的是topic 类型的交换器在匹配规则上进行了扩展它约定:RoutingKey和BindingKey为一个点号”.”分隔的字符串且BindingKey中可以存在两种特殊字符串”*“和”#“,用于做模糊匹配
  • headers类型的交换器不依赖于路由键的匹配规则来路由消息,而是根据发送的消息内容中headers属性进行匹配。在绑定队列和交换器时制定一组键值对 当发送消息到交换器时,RabbitMQ会获取到该消息的 headers (也是一个键值对的形式) ,对比其中的键值对是否完全匹配队列和交换器绑定时指定的键值对,如果完全匹配则消息会路由到该队列,否则不会路由到该队列

绑定Binding

将交换器与队列的关系就是通过绑定关联起来的,将一个队列绑定到交换机的时候一般会指定一个绑定键BindingKey ,这样当生产者投递到交换机的消息就会根据消息标签中的BindingKey 投递到对应的队列中

640?wx\_fmt=png

路由键RoutingKey

在使用direct和topic这两种交换机的时候生产者想要准确的投递到队列中就必须指定RoutingKey

队列Queue

队列是 RabbitMQ 的内部对象,用 于存储消息,且只存储消息体。因为消息的标签是存储的消息的路由、延迟等信息,所以当交换机把消息投递到队列时这些标签就没有作用了,也就被丢弃了。

与Kafka将消息存储在 topic 中不同的是RabbitMQ 中消息都只能存储在队列中

消费者Conumer

消息接受方。消费者连接到 RabbitMQ 服务器,并订阅到队列上 。

消费者只会消费到消息体不知道消息的生产者是谁,当然也不知道Broker

640?wx\_fmt=gif

不得不看

1.SpringCloud系列博客汇总

2.为啥一线大厂面试必问Redis,有啥好问的?

3.Java多线程面试必备基础知识汇总

4.Java集合源码分析汇总

5.Linux常用命令汇总

6.JVM系列文章汇总

7.MySQL系列文章汇总

640?wx\_fmt=jpeg

万水千山总是情,点个 “在看” 行不行!!!

640?wx\_fmt=png

发表评论

表情:
评论列表 (有 0 条评论,161人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Rabbit基础概念

    为金融级必选的消息中间件,RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能等特性受到越来越多企业的青睐,本篇文章简单介绍一下在初次学习RabbitMQ时涉及的一...

    相关 Rabbit MQ篇:Rabbit MQ 介绍

    `RabbitMQ`作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、