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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
21天前
|
存储 监控 Java
JAVA线程池有哪些队列? 以及它们的适用场景案例
不同的线程池队列有着各自的特点和适用场景,在实际使用线程池时,需要根据具体的业务需求、系统资源状况以及对任务执行顺序、响应时间等方面的要求,合理选择相应的队列来构建线程池,以实现高效的任务处理。
102 12
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
64 3
|
3月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
3月前
|
消息中间件 存储 监控
RabbitMQ 队列之战:Classic 和 Quorum 的性能洞察
RabbitMQ 是一个功能强大的消息代理,用于分布式应用程序间的通信。它通过队列临时存储消息,支持异步通信和解耦。经典队列适合高吞吐量和低延迟场景,而仲裁队列则提供高可用性和容错能力,适用于关键任务系统。选择哪种队列取决于性能、持久性和容错性的需求。
276 6
|
3月前
|
存储 安全 Java
【用Java学习数据结构系列】探索栈和队列的无尽秘密
【用Java学习数据结构系列】探索栈和队列的无尽秘密
46 2
|
3月前
|
消息中间件 存储 JSON
rabbitmq基础教程(ui,java,springamqp)
本文提供了RabbitMQ的基础教程,包括如何使用UI创建队列和交换机、Java代码操作RabbitMQ、Spring AMQP进行消息发送和接收,以及如何使用不同的交换机类型(fanout、direct、topic)进行消息路由。
46 0
rabbitmq基础教程(ui,java,springamqp)
|
4月前
|
Java API 容器
JAVA并发编程系列(10)Condition条件队列-并发协作者
本文通过一线大厂面试真题,模拟消费者-生产者的场景,通过简洁的代码演示,帮助读者快速理解并复用。文章还详细解释了Condition与Object.wait()、notify()的区别,并探讨了Condition的核心原理及其实现机制。
|
3月前
|
存储 算法 Java
【用Java学习数据结构系列】用堆实现优先级队列
【用Java学习数据结构系列】用堆实现优先级队列
48 0
|
3月前
|
消息中间件 前端开发 Java
java高并发场景RabbitMQ的使用
java高并发场景RabbitMQ的使用
150 0
|
4月前
|
消息中间件
rabbitmq,&队列
rabbitmq,&队列

热门文章

最新文章