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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3天前
|
消息中间件 Java 数据安全/隐私保护
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
Spring Cloud 项目中实现推送消息到 RabbitMQ 消息中间件
|
5天前
|
消息中间件 JSON Java
RabbitMQ的springboot项目集成使用-01
RabbitMQ的springboot项目集成使用-01
|
5天前
|
消息中间件 Java Spring
Springboot 集成Rabbitmq之延时队列
Springboot 集成Rabbitmq之延时队列
7 0
|
5天前
|
NoSQL Java Redis
springboot之RedisTemplate的访问单机,哨兵,集群模式
以上是配置RedisTemplate以连接到单机、哨兵和集群模式的示例。在实际应用中,还可以根据需求配置连接池、序列化方式、超时等其他参数。
38 0
|
5天前
|
传感器 人工智能 前端开发
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
智慧校园电子班牌,坐落于班级的门口,适合于各类型学校的场景应用,班级学校日常内容更新可由班级自行管理,也可由学校统一管理。让我们一起看看,电子班牌有哪些功能呢?
107 4
JAVA语言VUE2+Spring boot+MySQL开发的智慧校园系统源码(电子班牌可人脸识别)Saas 模式
|
5天前
|
消息中间件 Java RocketMQ
Spring Cloud RocketMQ:构建可靠消息驱动的微服务架构
【4月更文挑战第28天】消息队列在微服务架构中扮演着至关重要的角色,能够实现服务之间的解耦、异步通信以及数据分发。Spring Cloud RocketMQ作为Apache RocketMQ的Spring Cloud集成,为微服务架构提供了可靠的消息传输机制。
30 1
|
5天前
|
消息中间件 人工智能 Java
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
Spring Boot+RocketMQ 实现多实例分布式环境下的事件驱动
27 1
|
5天前
|
消息中间件 Java
SpringBoot基于RabbitMQ实现死信队列 (SpringBoot整合RabbitMQ实战篇)
SpringBoot基于RabbitMQ实现死信队列 (SpringBoot整合RabbitMQ实战篇)
35 1
|
5天前
|
消息中间件 安全 Java
SpringBoot基于RabbitMQ实现消息可靠性
SpringBoot基于RabbitMQ实现消息可靠性
38 0
|
5天前
|
消息中间件 Java
SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
11 1