• [MQ] 交换机与队列的介绍


    ✨✨个人主页:沫洺的主页

    📚📚系列专栏: 📖 JavaWeb专栏📖 JavaSE专栏 📖 Java基础专栏📖vue3专栏 

                               📖MyBatis专栏📖Spring专栏📖SpringMVC专栏📖SpringBoot专栏

                               📖Docker专栏📖Reids专栏📖MQ专栏📖SpringCloud专栏     

    💖💖如果文章对你有所帮助请留下三连✨✨

    💌消息推送到接收的流程

    下图是一个简单的消息推送到接收的流程

    黄色的圈圈就是我们的消息推送服务,将消息推送到 中间方框里面也就是 rabbitMq的服务器,然后经过服务器里面的交换机、队列等各种关系(后面会详细讲)将数据处理入列后,最终右边的蓝色圈圈消费者获取对应监听的消息。

    💌常用的交换机

    常用的交换机有以下三种,因为消费者是从队列获取信息的,队列是绑定交换机的(一般),所以对应的消息推送/接收模式也会有以下几种:

    1. 直连交换机(Direct Exchange)
    2. 扇型(广播)交换机(Fanout Exchange)
    3. 主题交换机(Topic Exchange)

    1️⃣Direct Exchange

    直连型交换机,根据消息携带的路由键将消息投递给对应队列。

    大致流程,有一个队列绑定到一个直连交换机上,同时赋予一个路由键 routing key 。

    然后当一个消息携带着路由值为X,这个消息通过生产者发送给交换机时,交换机就会根据这个路由值X去寻找绑定值也是X的队列。

    2️⃣Fanout Exchange

    扇型(广播)交换机,这个交换机没有路由键概念,就算你绑了路由键也是无视的。 这个交换机在接收到消息后,会直接转发到绑定到它上面的所有队列。

    3️⃣Topic Exchange

    主题交换机,这个交换机其实跟直连交换机流程差不多,但是它的特点就是在它的路由键和绑定键之间是有规则的。

    简单地介绍下规则:

    1. * (星号) 用来表示一个单词 (必须出现的)
    2. # (井号) 用来表示任意数量(零个或多个)单词
    3. // * 代表两点之间一个占位单词
    4. // # 代表后面所有,匹配所有

    通配的绑定键是跟队列进行绑定的,举个小例子

    队列Q1 绑定键为 *.TT.* 队列Q2绑定键为 TT.#

    如果一条消息携带的路由键为 A.TT.B,那么队列Q1将会收到;

    如果一条消息携带的路由键为TT.AA.BB,那么队列Q2将会收到;

    当一个队列的绑定键为 "#"(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。

    当 * (星号) 和 # (井号) 这两个特殊字符都未在绑定键中出现的时候,此时主题交换机就拥有的直连交换机的行为。

    所以主题交换机也就实现了扇形交换机的功能,和直连交换机的功能

    ⛲手动创建RabbitMQ交换与队列

    创建队列

     创建交换机

     绑定交换机与队列

     交换机发送消息

     队列获取消息

    以上其实就是直连交换机的模式

    广播交换机

    与直连交互机的区别就是没有Routing key

    广播交换机在进行队列绑定时是不需要Routing key的,也就是当交换机发生消息时,会将消息给每一个绑定的队列发送过去

    主体交换机

    前面说了

    *  代表两点之间一个占位单词
    #  代表后面所有,匹配所有

    创建三个队列

     创建主体交换机

     绑定关系

    给Routing key为lan.qiu的队列发生消息如下

     可以看到*.qiu的队列qiu也收到了消息

    当一个队列的绑定键为 "#"(井号) 的时候,这个队列将会无视消息的路由键,接收所有的消息。

  • 相关阅读:
    Learning How to Ask: Querying LMs with Mixtures of Soft Prompts
    MySQL:索引有哪些(清晰明了)
    初识操作系统以及Linux环境搭建
    二、python+前端 实现MinIO分片上传
    java:十六进制转ip地址
    【二叉树层序遍历 + 置换环】逐层排序二叉树所需的最少操作数目
    html地铁跑酷
    伊朗网络间谍组织针对中东金融和政府部门
    matlab层次分析法模型及相关语言基础
    Jenkins配置在远程服务器上执行shell脚本(两种方式)
  • 原文地址:https://blog.csdn.net/HeyVIrBbox/article/details/127845214