RabbitMQ 中怎么实现 Direct 直连路由模式

轻瑶君_1165

轻瑶君_1165

2026-08-09

1008人浏览

原创

direct模式通过exchange、routing key与binding key三者严格等值匹配实现消息定向投递,仅当routing key与binding key完全相同时,消息才被转发至对应队列,支持一对一或一对多精准路由。

rabbitmq 中怎么实现 direct 直连路由模式

RabbitMQ 的 Direct 模式靠Exchange + Routing Key + Binding Key三者精确匹配来实现消息定向投递。它不是广播,也不是模糊匹配,而是“一对一”或“一对多”的严格等值路由——只有消息的 Routing Key 与队列绑定时指定的 Binding Key 完全一致,消息才会进入该队列。

核心机制:交换机如何做路由判断

Direct Exchange 的路由逻辑非常简单直接:

  • 生产者发送消息时,必须指定一个 Routing Key(如 "error""info""email"
  • 每个队列在绑定到 Direct Exchange 时,必须声明一个 Binding Key(例如 queue-error 绑定 "error"
  • Exchange 收到消息后,只比对 Routing Key 和所有已绑定队列的 Binding Key ——完全相等才转发,否则丢弃(除非配置了 mandatory + return callback)
  • 多个队列可以绑定相同的 Binding Key,此时消息会同时投递到所有匹配队列(类似 Fanout 行为)

关键操作步骤(以 Spring Boot 为例)

实际落地需完成四件事:声明 Exchange、声明 Queue、建立 Binding、发送/消费带 Key 的消息。

Java Development Manual
Java Development Manual

Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...

下载
  • 声明 Direct Exchange:类型为 ExchangeTypes.DIRECT,建议设 durable=true 确保重启不丢失
  • 声明多个 Queue:例如 "log.error.queue""log.info.queue",均设为持久化
  • 绑定并指定 Binding KeyBindingBuilder.bind(queueError).to(directExchange).with("error");同理 info 队列绑定 "info"
  • 发送时携带 Routing Key:用 RabbitTemplate.convertAndSend(exchangeName, "error", message) ——第二个参数就是 Routing Key
  • 消费者监听指定队列即可:无需关心 Key,因为路由已在投递阶段完成;也可用 @RabbitListener(queues = "log.error.queue") 直接监听

常见使用场景与注意事项

Direct 模式适合需要按类别、级别、模块等明确标签分流的业务。

  • 典型场景:日志分级(error/info/warn 分发到不同处理队列)、订单状态变更("order.created" / "order.paid" 路由到对应服务)、多通道通知(email/sms/app_push 各自绑定不同 Key)
  • Binding Key 区分大小写,且是字符串全匹配,不支持通配符(那是 Topic 模式的事)
  • 未匹配的消息默认被丢弃,如需捕获异常路由,可开启 mandatory=true 并配合 ReturnCallback 处理
  • 不依赖队列名做路由,队列名可任意命名(如 "q1"),真正起作用的是 Binding Key

Python 或 Java 原生客户端要点

脱离 Spring Boot 时,手动操作更需注意协议细节:

  • 创建 Exchange 时必须显式声明 exchange_type='direct'
  • 绑定队列用 channel.queue_bind(queue=..., exchange=..., routing_key="xxx"),这里的 routing_key 就是 Binding Key
  • 发送消息调用 channel.basic_publish(..., routing_key="error", ...),这个 routing_key 是生产者设定的 Routing Key
  • 务必确保 Exchange、Queue、Binding 三者都已存在,否则发送可能失败或静默丢弃

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

java 路由 rabbitmq

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
rabbitmq和kafka有什么区别
rabbitmq和kafka有什么区别

rabbitmq和kafka的区别:1、语言与平台;2、消息传递模型;3、可靠性;4、性能与吞吐量;5、集群与负载均衡;6、消费模型;7、用途与场景;8、社区与生态系统;9、监控与管理;10、其他特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

504

5

Java 消息队列与异步架构实战
Java 消息队列与异步架构实战

本专题系统讲解 Java 在消息队列与异步系统架构中的核心应用,涵盖消息队列基本原理、Kafka 与 RabbitMQ 的使用场景对比、生产者与消费者模型、消息可靠性与顺序性保障、重复消费与幂等处理,以及在高并发系统中的异步解耦设计。通过实战案例,帮助学习者掌握 使用 Java 构建高吞吐、高可靠异步消息系统的完整思路。

2026.01.28

648

20

RabbitMQ使用教程合集
RabbitMQ使用教程合集

RabbitMQ使用教程合集整理 RabbitMQ 基础教程、消息队列开发案例、生产者消费者、交换机与队列实战内容。

2026.05.20

144

15

RabbitMQ集群部署指南
RabbitMQ集群部署指南

RabbitMQ集群部署指南聚合 RabbitMQ 集群部署、高可用架构、镜像队列、故障恢复、监控与运维优化内容。

2026.05.20

97

12

RabbitMQ Docker实战指南
RabbitMQ Docker实战指南

RabbitMQ Docker实战指南提供 RabbitMQ Docker 镜像部署、Docker Compose、Kubernetes Operator 与云原生实践教程。

2026.05.20

122

10

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

20

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

100

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习