RabbitMQ各种模式的含义与Spring Boot实例详解

简介: RabbitMQ各种模式的含义与Spring Boot实例详解

RabbitMQ各种模式的含义与Spring Boot实例详解

RabbitMQ是一款强大的消息中间件,支持多种消息传递模式。在这篇文章中,我们将详细解释RabbitMQ的几种常见模式,并通过Spring Boot实例代码进行演示,让读者更好地理解每种模式的含义。

1. Direct Exchange(直连交换机)

含义: Direct Exchange 是一种简单的消息路由模式。在这个模式下,消息的路由键与绑定时指定的路由键完全匹配,消息才会被发送到相应的队列。

比喻: 想象你有一个快递服务,每个包裹都有一个独一无二的编号。直连交换机就像你把包裹按照编号直接送到对应的收件人手中。

Spring Boot实例:

@RestController
public class DirectExchangeController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendDirectMessage")
    public String sendDirectMessage() {
        String message = "Hello Direct Exchange!";
        rabbitTemplate.convertAndSend("directExchange", "directRoutingKey", message);
        return "Message sent: " + message;
    }
}

2. Fanout Exchange(扇形交换机)

含义: Fanout Exchange 将消息广播到所有绑定到它的队列,忽略 Routing Key。无论消息的 Routing Key 是什么,所有绑定到该交换机的队列都会收到相同的消息。

比喻: 想象你有一个广播电台,无论听众在哪个频道,只要打开收音机就能收到相同的音乐。Fanout Exchange 就像这个广播电台。

Spring Boot实例:

@RestController
public class FanoutExchangeController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendFanoutMessage")
    public String sendFanoutMessage() {
        String message = "Hello Fanout Exchange!";
        rabbitTemplate.convertAndSend("fanoutExchange", "", message);
        return "Message sent: " + message;
    }
}

3. Topic Exchange(主题交换机)

含义: Topic Exchange 允许队列通过通配符匹配的方式来绑定 Routing Key,更灵活地进行消息过滤。生产者将消息发送到主题交换机,同时指定一个与消息相关的 Routing Key。

比喻: 想象你有一个新闻站,用户可以根据自己的兴趣订阅不同的主题。Topic Exchange 就像用户订阅不同主题的新闻。

Spring Boot实例:

@RestController
public class TopicExchangeController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendTopicMessage")
    public String sendTopicMessage() {
        String message = "Hello Topic Exchange!";
        rabbitTemplate.convertAndSend("topicExchange", "topic.routing.key", message);
        return "Message sent: " + message;
    }
}

4. Headers Exchange(头交换机)

含义: Headers Exchange 使用消息头的属性来进行匹配,而不是使用 Routing Key。生产者在发送消息时可以设置消息头的键值对,消费者在绑定队列时指定一组键值对。

比喻: 想象你有一个私人飞机,只有在天气晴朗的情况下才会飞行。Headers Exchange 就像你设置一组天气条件,只有满足条件的时候才会起飞。

Spring Boot实例:

@RestController
public class HeadersExchangeController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendHeadersMessage")
    public String sendHeadersMessage() {
        String message = "Hello Headers Exchange!";
        MessageHeaders headers = MessageHeadersBuilder
                .withDefault()
                .setHeader("header1", "value1")
                .setHeader("header2", "value2")
                .build();
        Message<String> rabbitMessage = MessageBuilder.createMessage(message, headers);
        rabbitTemplate.send("headersExchange", "", rabbitMessage);
        return "Message sent: " + message;
    }
}

5. Default Exchange(默认交换机)

含义: Default Exchange 是一个 Direct Exchange,它允许使用队列的名称作为 Routing Key。当消息发送到 Exchange 时,会根据 Routing Key 直接路由到与之同名的队列。

比喻: 想象你有一个小邮局,每个邮箱的名字就是收信人的名字。Default Exchange 就像你直接把信件放到相应的邮箱。

Spring Boot实例:

@RestController
public class DefaultExchangeController {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("/sendDefaultMessage")
    public String sendDefaultMessage() {
        String message = "Hello Default Exchange!";
        rabbitTemplate.convertAndSend("", "defaultQueue", message);
        return "Message sent: " + message;
    }
}
相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
2月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
199 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
2月前
|
消息中间件 存储 Java
RabbitMQ 和 Spring Cloud Stream 实现异步通信
本文介绍了在微服务架构中,如何利用 RabbitMQ 作为消息代理,并结合 Spring Cloud Stream 实现高效的异步通信。内容涵盖异步通信的优势、RabbitMQ 的核心概念与特性、Spring Cloud Stream 的功能及其与 RabbitMQ 的集成方式。通过这种组合,开发者可以构建出具备高可用性、可扩展性和弹性的分布式系统,满足现代应用对快速响应和可靠消息传递的需求。
173 2
RabbitMQ 和 Spring Cloud Stream 实现异步通信
|
6月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
228 32
|
消息中间件
RabbitMQ的 RPC 消息模式你会了吗?
【9月更文挑战第11天】RabbitMQ 的 RPC(远程过程调用)消息模式允许客户端向服务器发送请求并接收响应。其基本原理包括:1) 客户端发送请求,创建回调队列并设置关联标识符;2) 服务器接收请求并发送响应至回调队列;3) 客户端根据关联标识符接收并匹配响应。实现步骤涵盖客户端和服务器的连接、信道创建及请求处理。注意事项包括关联标识符唯一性、回调队列管理、错误处理及性能考虑。RPC 模式适用于构建可靠的分布式应用程序,但需根据需求调整优化。
357 3
|
10月前
|
负载均衡 IDE Java
SpringBoot整合XXL-JOB【04】- 以GLUE模式运行与执行器负载均衡策略
在本节中,我们将介绍XXL-JOB的GLUE模式和集群模式下的路由策略。GLUE模式允许直接在线上改造方法为定时任务,无需重新部署。通过一个测试方法,展示了如何在调度中心配置并使用GLUE模式执行定时任务。接着,我们探讨了多实例环境下的负载均衡策略,确保任务不会重复执行,并可通过修改路由策略(如轮训)实现任务在多个实例间的均衡分配。最后,总结了GLUE模式和负载均衡策略的应用,帮助读者更深入理解XXL-JOB的使用。
497 9
SpringBoot整合XXL-JOB【04】-  以GLUE模式运行与执行器负载均衡策略
|
8月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
280 0
|
11月前
|
消息中间件 网络协议 RocketMQ
RocketMQ Controller 模式 始终更新成本机ip
ontrollerAddr=192.168.24.241:8878 但是日志输出Update controller leader address to 127.0.0.1:8878。导致访问失败
219 3
|
11月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
227 6
|
消息中间件 应用服务中间件 网络安全
rabbitMQ镜像模式搭建
rabbitMQ镜像模式搭建
|
4月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。