• AMQP协议详解


    首先给大家做个类比,如:
    ① 你在楼下咖啡店买了无数杯咖啡后,和咖啡店小姐姐步入爱河,后来终于到了谈婚论嫁的时候。
    ② 你这才发现结婚的程序如此繁琐,婚纱照、结婚照、结婚证、准备婚礼、准备喜糖、回请双方同事、接亲时还有10关大考验 <-- 这是“协议”, 指的是一般规范
    ③ 你们商量后,决定婚礼就去海边旅行结婚,喜糖就用大白兔的,回请就给同事发个红包,但是10关大考验变成了15关 <–这是实现,指的是具体情况

    一、AMQP协议对于RabbitMQ的意义

    ● AMQP协议作为RabbitMQ的规范,规定了RabbitMQ对外接口
    ● 学会了AMQP协议的使用,就基本掌握了RabbitMQ的使用
    ● 学会了AMQP协议的概念,就基本掌握了RabbitMQ的核心概念

    二、AMQP详尽架构

    在这里插入图片描述

    Broker:接收和分发消息的应用,RabbitMQ 就是 Message Broker
    Virtual Host:虚拟 Broker,将多个单元隔离开
    Connection:publisher / consumer 和 broker 之间的 tcp 连接
    Channel:connection 内部建立的逻辑连接,通常每个线程创建单独的 channel
    Routing key:路由键,用来指示消息的路由转发,相当于快递的地址
    Exchange:交换机,相当于快递的分拨中心
    Queue:消息队列,消息最终被送到这里等待 consumer 取走
    Binding:exchange 和 queue 之间的虚拟连接,用于 message 的分发依据

    三、Exchange的作用

    ● Exchange 是 AMQP 协议和 RabbitMQ 的 核心组件
    ● Exchange 的功能是根据 绑定关系路由键 为消息提供路由,将消息转发至相应的队列
    ● Exchange 有四种类型:Direct / Topic / Fanout / Headers,其中Headers很少使用,以前三种为主

    四、Direct Exchange

    在这里插入图片描述

    Message 中的 Routing Key 如果和 Binding Key 一致,Direct Exchange 则将 message 发到对应的 queue中

    五、Fanout Exchange

    在这里插入图片描述

    每个发到 Fanout Exchange 的 message 都会分发到所有绑定的 queue 上去

    六、Topit Exchange

    在这里插入图片描述

    ● 根据 Routing Key 及通配规则,Topic Exchange 将消息分发到目标 Queue 中
    ● 全匹配:与 Direct 类似
    ● Binding Key 中的 #:匹配任意个数的 word
    ● Binding Key 中的 *:匹配任意1个 word
    例子:咖啡、奶茶、果汁,三种饮料

    1. 咖啡含有咖啡因,冷热均可,苦甜均可,Binding Key:caffeine.#
    2. 奶茶不含有咖啡因,热饮,甜味,Binding Key:nocaffeine.hot.sweet
    3. 果汁不含有咖啡因,冷热均可,甜味,Binding Key:nocaffeine.* .sweet

    情景一:无咖啡因、热饮、甜味
    在这里插入图片描述

    情景二:有咖啡因、冷饮、苦味
    在这里插入图片描述

    情景三:无咖啡因、冷饮、甜味
    在这里插入图片描述

    可以去:http://tryrabbitmq.com/ 尝试一下自己的理解

    七、总结

    ● AMQP协议直接决定了 RabbitMQ 的内部结构和外部行为
    ● 对于发送者来说,将消息发给特定的 Exchange
    ● 消息经过 Exchange 路由后,到达具体队列
    ● 消费者将消息从监听的队列中取走
    ● Exchange 主要有 3 种类型:Direct / Topic / Fanout
    Direct (直接路由):Routing Key = Binding Key,容易配置和使用
    Fanout (广播路由):群发绑定的所有队列,适用于消息广播
    Topic (话题路由):功能较为复杂,但能降级为 Direct ,建议优先适用,为以后拓展留余地

  • 相关阅读:
    C#窗体中动态按钮的设计方法:创建特殊窗体
    ML之shap:基于adult人口普查收入二分类预测数据集(预测年收入是否超过50k)利用Shap值对XGBoost模型实现可解释性案例之详细攻略
    【Docker】安装及相关的命令
    基于粒子群算法的电力系统无功优化研究(IEEE14节点)(Matlab代码实现)
    备战2023秋招,应届生应做好哪些准备
    干货!解决IDEA中项目出现cannot resolve method ‘XXXXX(java.lang.String)’问题
    WSL Ubuntu + Docker Desktop搭建python环境
    Qt 集成OSG
    对Numpy切片的认识
    计算机毕业设计python基于django的少儿编程线上教育系统
  • 原文地址:https://blog.csdn.net/weixin_47627102/article/details/126130131