RabbitMQ入门指南(五):Java声明队列、交换机以及绑定

简介: RabbitMQ是一个高效、可靠的开源消息队列系统,广泛用于软件开发、数据传输、微服务等领域。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容。

一、Spring AMQP基本API

在上一节案例中都是通过RabbitMQ控制台来手动创建队列和交换机。然而,在实际开发中这些队列和交换机通常是在代码中定义的,推荐的做法是在程序启动时检查队列和交换机是否存在,如果不存在则自动创建。Spring AMQP提供了一套完整的API来帮助开发者与RabbitMQ进行交互。

Spring AMQP提供了类,用来声明队列、交换机及其绑定关系:

  • Queue:用于声明队列,可以用工厂类QueueBuilder构建
  • Exchange:用于声明交换机,可以用工厂类ExchangeBuilder构建
  • Binding:用于声明队列和交换机的绑定关系,可以用工厂类BindingBuilder构建

Spring AMQP提供了QueueBuilder来简化队列的创建过程。


Exchange接口表示了不同类型的交换机,可以创建和配置不同类型的交换机,如Direct Exchange、Fanout Exchange、Topic Exchange等,以满足不同的消息传递需求。


Spring AMQP提供了ExchangeBuilder来简化交换机的创建过程。


在绑定队列和交换机时,需要使用BindingBuilder来创建Binding对象。这个对象表示一个队列和一个交换机之间的绑定关系,它定义了消息应该如何从交换机路由到队列。


二、案例分析

1.Fanout交换机案例

声明交换机:

  • 创建FanoutExchange Bean:
@Bean
    public FanoutExchange fanoutExchange1(){
        return new FanoutExchange("test1.fanout");
    }

image.gif

  • 使用ExchangeBuilder创建FanoutExchange Bean:
@Bean
    public FanoutExchange fanoutExchange2(){
        return ExchangeBuilder.fanoutExchange("test2.fanout").build();
    }

image.gif

声明队列:

  • 创建队列Bean(默认为持久队列):
@Bean
    public Queue fanoutQueue1(){
        return new Queue("test1.queue");
    }

image.gif

  • 使用QueueBuilder创建持久队列Bean:
@Bean
    public Queue fanoutQueue2(){
        return QueueBuilder.durable("test2.queue").build();
    }

image.gif

使用BindingBuilder创建Binding Bean来绑定队列和交换机:

  • 方法一:
@Bean
    public Binding fanoutBinding1(Queue fanoutQueue1, FanoutExchange fanoutExchange1){
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange1);
    }

image.gif

  • 方法二:
@Bean
    public Binding fanoutBinding2(){
        return BindingBuilder.bind(fanoutQueue1()).to(fanoutExchange1());
    }

image.gif

运行结果:




2.Direct交换机案例

声明交换机:

@Bean
    public DirectExchange directExchange(){
        return new DirectExchange("test1.direct");
    }

image.gif

声明队列:

@Bean
    public Queue directQueue1(){
        return new Queue("test3.queue");
    }

image.gif

使用BindingBuilder创建Binding Bean来绑定队列和交换机:

@Bean
    public Binding directQueueBindingRed1(Queue directQueue1, DirectExchange directExchange){
        return BindingBuilder.bind(directQueue1).to(directExchange).with("red");
    }
    @Bean
    public Binding directQueueBindingBlue2(Queue directQueue1, DirectExchange directExchange){
        return BindingBuilder.bind(directQueue1).to(directExchange).with("blue");
    }

image.gif

Spring AMQP还提供了基于@RabbitListener注解来声明队列、交换机和绑定队列和交换机的方式:

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "test3.queue", durable = "true"),
            exchange = @Exchange(name = "test1.direct", type = ExchangeTypes.DIRECT),
            key = {"red", "blue"}))
    public void listenDirectQueue1(String msg) throws InterruptedException {
        System.out.println("test1.direct:" + msg);
    }

image.gif

运行结果:




3.Topic交换机案例

基于@RabbitListener注解来声明队列、交换机和绑定队列和交换机的方式:

@RabbitListener(bindings = @QueueBinding(
            value = @Queue(name = "test4.queue"),
            exchange = @Exchange(name = "test1.topic", type = ExchangeTypes.TOPIC),
            key = "china.#"))
    public void listenTopicQueue1(String msg) {
        System.out.println("test1.topic:" + msg);
    }

image.gif

运行结果:





总结

RabbitMQ是一个开源的消息队列软件,旨在提供可靠的消息传递和消息队列功能。本文主要介绍了Java声明队列、交换机以及绑定队列和交换机等内容,希望对大家有所帮助。

相关实践学习
快速体验阿里云云消息队列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
相关文章
什么是死信交换机 ? 如何为队列绑定死信交换机 ?
死 信交换机和正常的交换机没有什么不同 , 如果一个包含死信的队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为死信交换机 为队列绑定死信交换机 , 只需要设置队列属性 dead-letter-exchange即可
|
消息中间件 存储 缓存
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
1316 7
RabbitMQ:交换机详解(Fanout交换机、Direct交换机、Topic交换机)
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
845 6
|
消息中间件
rabbitmq,&队列
rabbitmq,&队列
|
消息中间件 JSON Java
玩转RabbitMQ声明队列交换机、消息转换器
玩转RabbitMQ声明队列交换机、消息转换器
398 0
|
4月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。
|
2月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
221 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
840 95
|
消息中间件 安全 Java
云消息队列RabbitMQ实践解决方案评测
一文带你详细了解云消息队列RabbitMQ实践的解决方案优与劣
359 103