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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1月前
|
消息中间件
RabbitMQ的 RPC 消息模式你会了吗?
【9月更文挑战第11天】RabbitMQ 的 RPC(远程过程调用)消息模式允许客户端向服务器发送请求并接收响应。其基本原理包括:1) 客户端发送请求,创建回调队列并设置关联标识符;2) 服务器接收请求并发送响应至回调队列;3) 客户端根据关联标识符接收并匹配响应。实现步骤涵盖客户端和服务器的连接、信道创建及请求处理。注意事项包括关联标识符唯一性、回调队列管理、错误处理及性能考虑。RPC 模式适用于构建可靠的分布式应用程序,但需根据需求调整优化。
|
2月前
|
消息中间件 Java 网络架构
|
2月前
|
消息中间件 Java 测试技术
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
|
2月前
|
消息中间件 开发者
【RabbitMQ深度解析】Topic交换器与模式匹配:掌握消息路由的艺术!
【8月更文挑战第24天】在消息队列(MQ)体系中,交换器作为核心组件之一负责消息路由。特别是`topic`类型的交换器,它通过模式匹配实现消息的精准分发,适用于发布-订阅模式。不同于直接交换器和扇形交换器,`topic`交换器支持更复杂的路由策略,通过带有通配符(如 * 和 #)的模式字符串来定义队列与交换器间的绑定关系。
53 2
|
2月前
|
消息中间件
RabbitMQ广播模式
RabbitMQ广播模式
48 1
|
2月前
|
消息中间件 应用服务中间件 网络安全
rabbitMQ镜像模式搭建
rabbitMQ镜像模式搭建
|
2月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
56 0
|
2月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
SpringBoot单元测试快速写法问题之创建 PorkInst 实例如何解决
|
3月前
|
消息中间件 传感器 负载均衡
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
消息队列 MQ使用问题之如何配置一主一从的同步复制模式
|
2月前
|
消息中间件 Java Maven
RabbitMQ通配符模式
RabbitMQ通配符模式
46 0