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
相关文章
|
30天前
|
物联网
MQTT常见问题之用单片机接入阿里MQTT实例失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
1月前
|
NoSQL Java 数据库
【问题篇】springboot项目通过数据库限制实例端口号
【问题篇】springboot项目通过数据库限制实例端口号
19 0
|
1月前
|
监控 Java 数据处理
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
【Spring云原生】Spring Batch:海量数据高并发任务处理!数据处理纵享新丝滑!事务管理机制+并行处理+实例应用讲解
|
2月前
|
消息中间件 Java Maven
一文搞懂Spring Boot整合RocketMQ
一文搞懂Spring Boot整合RocketMQ
102 0
|
1月前
|
NoSQL Java Redis
小白版的springboot中集成mqtt服务(超级无敌详细),实现不了掐我头!!!
小白版的springboot中集成mqtt服务(超级无敌详细),实现不了掐我头!!!
272 1
|
1月前
|
消息中间件 Java
springboot整合消息队列——RabbitMQ
springboot整合消息队列——RabbitMQ
75 0
|
1天前
|
消息中间件 安全 Java
SpringBoot基于RabbitMQ实现消息可靠性
SpringBoot基于RabbitMQ实现消息可靠性
23 0
|
2天前
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)
SpringBoot实现RabbitMQ的定向交换机(SpringAMQP 实现Direct定向交换机)
|
2天前
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue)
SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue)
|
2天前
|
安全 Java Maven
[AIGC] Spring Boot中的切面编程和实例演示
[AIGC] Spring Boot中的切面编程和实例演示