deepwzh的技术笔记
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • Golang
  • Python
  • Cpp
杂项
前端开发
  • 计算机网络
  • 操作系统
  • 数据库
云原生
Devops
AIGC
关于作者
  • 杂项
  • Windows UI 自动化方案调研 (2026)v2
  • Nginx
  • 首页
  • Protobuf
  • 学习资料
  • 杂项
  • Ldap
  • 编译原理
  • 分布式

    • 分布式
    • Raft 算法
  • 开发工具

    • 开发工具
    • cloc
    • Vscode
    • 工具箱
    • Visual Studio

      • Visual Studio
      • C++ 相关
      • Visual Studio 基本知识
  • 软件设计

    • 软件设计
    • MVC
    • 领域驱动设计
    • PO、DO、DTO、VO
    • 高内聚低耦合
  • 消息队列

    • 消息队列
    • Celery
    • Kafka
    • RabbitMQ
  • 设计模式

    • 设计模式
    • 控制反转和依赖注入
    • 七大原则
  • 网络安全

    • 网络安全
    • 请求签名
    • CSRF
    • XSS
  • 版本管理工具

    • 版本管理工具
    • Git

      • Git
      • Git get 私有仓库报错
      • Github 加速
      • Clone
      • Git pull 出现 hint 时的解决方案
      • 修改提交记录的作者信息
      • Git mergr
  • 组成原理

    • 组成原理
    • CPU

RabbitMQ

概述

https://github.com/rabbitmq/cluster-operator

发布者发布消息,消息经由 Exchange 交换机,转发到对应的 Queue 队列上,再通过 Broker 与 Consumer 之间的 Connect Channel, 将消息发送给客户端

Exchange

  • Direct 类型:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行比较,如果相等,则发送到该 Binding 对应的 Queue 中
  • Topic 类型:将消息中的 Routing key 与该 Exchange 关联的所有 Binding 中的 Routing key 进行对比,如果匹配上了,则发送到该 Binding 对应的 Queue 中。
  • Fanout 类型:直接将消息转发到所有 binding 的对应 queue 中,这种 exchange 在路由转发的时候,忽略 Routing key。
  • Headers 类型:将消息中的 headers 与该 Exchange 相关联的所有 Binging 中的参数进行匹配,如果匹配上了,则发送到该 Binding 对应的 Queue 中(不常用,作用于 Direct 类型类似)。

Channel

信道,信道是建立在真实的 TCP 连接内地虚拟连接,AMQP 命令都是通过信道发出去的,不管是发布消息,订阅队列,还是接受消息,这些动作都是在信道完成的。

因为对于操作系统来说建立和销毁 TCP 都是非常安昂贵的开销,所以引入信道的概念,以此来复用一条 TCP 连接

工作模式

Work 队列

多个消费者消费同一个队列,每条消息只能被一个消费者消费

发布订阅

多个消费者各自消费单独的队列

路由模式

在发布订阅的基础上,Exchange 可以根据推送到 Routing Key,转发到具有相同 Routing key 的队列中

主题模式

在发布订阅的基础上,Exchange 可以根据推送到 Routing Key,转发到具有匹配 Routing key 的队列中(支持正则)

延时队列

死信队列

优先级队列

其他

消息持久化

消息顺序性

顺序性分为发送消息顺序,队列中顺序和消费消息的顺序

Rabbitmq 只保证队列中消息的顺序(即单个消费者消费的顺序相同),多个消费者并不能保证

队列属性

消息过期时间

可以分别设置队列的消息过期时间和单个 消息的过期时间

通过**队列属性(x-message-ttl)**设置消息过期时间。

参考资料

Prev
Kafka