spring-boot | rabbitMq-Topic Exchange

简介: 上篇文章我们主要介绍了rabbitMq的Direct模式,上手比较简单,但是存在一定局限性,不能基于多重条件进行路由选择。今天给大家介绍另外一种比较灵活的方式。主题转发模式(Topic Exchange)。

上篇文章我们主要介绍了rabbitMq的Direct模式,上手比较简单,但是存在一定局限性,不能基于多重条件进行路由选择。今天给大家介绍另外一种比较灵活的方式。主题转发模式(Topic Exchange)。这种模式的优势在于可以根据routing_ke的不同绑定到不同的队列,接收不同的消息。

在发送端增加配置

@Configuration
public class TopicConfig {
        
    //创建两个队列
    @Bean(name = "queuemessage")
    public  Queue queuemessage(){
        return new Queue("topic.message");
        
    }

    
    @Bean(name = "queuemessages")
    public Queue queuemessages(){
        return new Queue("topic.messages");
    }
    
    //创建交换机
    @Bean
    public TopicExchange exchange(){
        return new TopicExchange("exchange");
    }
    
    
    //绑定队列
    @Bean
    Binding binding1(@Qualifier("queuemessage")Queue queuemessage,TopicExchange exchange){
        return BindingBuilder.bind(queuemessage).to(exchange).with("topic.message");
    }
    
    //绑定队列
        @Bean
        Binding binding2(@Qualifier("queuemessages")Queue queuemessages,TopicExchange exchange){
            return BindingBuilder.bind(queuemessages).to(exchange).with("topic.#");
        }
    
}

匹配规则:

星号(*) :只能匹配一个单词
井号(#):可以匹配0个或多个单词

如果一个队列绑定的键为"#"时,将会接收所有的队列,类似于fanout转发器。
如果绑定的队列不包含"#"和"*"时,这时候类似于Direct模式,直接匹配。

接收端绑定指定队列

@Component
public class Receive {

   @RabbitListener(queues="topic.message")    
    public void processC(String obj) {
        System.out.println("receiver:topic.message:"+obj);
    }
    
    @RabbitListener(queues="topic.messages")    
    public void topics(String obj) {
        System.out.println("receiver:topic.messages:"+obj);
    }

}

测试类,一个三个参数,第一个参数是交换机的名字,第二个参数是队列的名字,第三个参数是发送的内容。

Component
public class Sender {
    
    @Autowired
    private AmqpTemplate template;
    
    @Scheduled(cron="0/5 * * * * ? ")   //每5秒执行一次 
    public void send() {
    //User user = new User(1, "张三", "男");
   DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
  template.convertAndSend("exchange","topic.message",sdf.format(new Date())+"主题转发模式!");

    }
    
}

当我们将队列名字设置为topic.message的时候,看下控制台发现,同一时间发送的消息会同时被两个队列接收。




我们再将队列名字设置为topic.test看一下

@Component
public class Sender {
    
    @Autowired
    private AmqpTemplate template;
    
    @Scheduled(cron="0/5 * * * * ? ")   //每5秒执行一次 
    public void send() {
    //User user = new User(1, "张三", "男");
        DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    template.convertAndSend("exchange","topic.test",sdf.format(new Date())+"主题转发模式!");
    }
    
}

发现只有topic.#匹配到了队列,到这里Topic Exchange以整合完毕。我会继续整合其他模式。



(未完待续)

相关实践学习
消息队列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
目录
相关文章
|
3月前
|
消息中间件 Java 网络架构
|
3月前
|
消息中间件 Java 测试技术
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
这篇文章是关于如何在SpringBoot应用中整合RabbitMQ的消息中间件。内容包括了在SpringBoot项目中添加RabbitMQ的依赖、配置文件设置、启动类注解,以及如何通过单元测试来创建交换器、队列、绑定,并发送和接收消息。文章还介绍了如何配置消息转换器以支持对象的序列化和反序列化,以及如何使用注解`@RabbitListener`来接收消息。
消息中间件RabbitMQ---SpringBoot整合RabbitMQ【三】
|
3月前
|
消息中间件 Java RocketMQ
微服务架构师的福音:深度解析Spring Cloud RocketMQ,打造高可靠消息驱动系统的不二之选!
【8月更文挑战第29天】Spring Cloud RocketMQ结合了Spring Cloud生态与RocketMQ消息中间件的优势,简化了RocketMQ在微服务中的集成,使开发者能更专注业务逻辑。通过配置依赖和连接信息,可轻松搭建消息生产和消费流程,支持消息过滤、转换及分布式事务等功能,确保微服务间解耦的同时,提升了系统的稳定性和效率。掌握其应用,有助于构建复杂分布式系统。
60 0
|
5月前
|
消息中间件 Java Kafka
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
SpringBoot实用开发篇第六章(整合第三方技术,ActiveMQ,RabbitMQ,RocketMQ,Kafka)
|
5月前
|
消息中间件 监控 Java
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
使用Spring Boot结合ActiveMQ和MQTT实现消息的发送和接收
460 3
|
4月前
|
消息中间件 Java 数据安全/隐私保护
Spring Boot与RabbitMQ的集成
Spring Boot与RabbitMQ的集成
|
4月前
|
消息中间件 Java RocketMQ
Spring Boot与RocketMQ的集成
Spring Boot与RocketMQ的集成
|
4月前
|
消息中间件 Java Spring
实现Spring Boot与RabbitMQ消息中间件的无缝集成
实现Spring Boot与RabbitMQ消息中间件的无缝集成
|
5月前
|
消息中间件 JavaScript Java
消息队列 MQ产品使用合集之如何嵌入到Spring Boot中运行
消息队列(MQ)是一种用于异步通信和解耦的应用程序间消息传递的服务,广泛应用于分布式系统中。针对不同的MQ产品,如阿里云的RocketMQ、RabbitMQ等,它们在实现上述场景时可能会有不同的特性和优势,比如RocketMQ强调高吞吐量、低延迟和高可用性,适合大规模分布式系统;而RabbitMQ则以其灵活的路由规则和丰富的协议支持受到青睐。下面是一些常见的消息队列MQ产品的使用场景合集,这些场景涵盖了多种行业和业务需求。
|
5月前
|
消息中间件 Java Spring
Spring Boot与RabbitMQ的集成应用
Spring Boot与RabbitMQ的集成应用