SpringBoot整合RabbitMQ示例详解

 更新时间:2023年07月12日 08:35:54   作者:卑微小钟  
这篇文章主要介绍了SpringBoot整合RabbitMQ示例详解,RabbitMQ是一个实现了AMQP高级消息队列协议的消息队列服务,用Erlang语言。是面向消息的中间件,需要的朋友可以参考下

SpringBoot整合RabbitMQ

1.生产者SpringBootProducer

1.1 创建工程并导入依赖

我们使用的springboot版本为2.5.6,其他都是根据spring-boot-starter-parent自动选择版本

引入以下工程即可

  • spring-boot-starter-test 用于测试
  • junit 用于单元测试
  • spring-boot-starter-amqp SpringBoot和RabbitMQ的整合方案
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.6</version>
        <relativePath/>
    </parent>
    <artifactId>springboot-producer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

1.2 创建配置文件并配置

SpringBoot配置文件名称为application.yml

需要配置的内容如下:

# 配置RabbitMQ的基本信息
spring:
  rabbitmq:
    # 地址
    host: 192.168.52.128
    # 端口
    port: 5672
    # 用户名
    username: admin
    # 密码
    password: admin
    # 虚拟机
    virtual-host: /test

1.3 创建项目启动类

@SpringBootApplication
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

1.4 创建RabbitMQ配置类

@Configuration
public class RabbitMQConfig {
	// 配置代码都写在这里
}

(1)设置默认的交换机的名称和队列名称

/**
 * 默认测试的交换机机名称
 * springboot_topic_exchange
 */
public static final String EXCHANGE_NAME = "springboot_topic_exchange";
/**
 * 默认的队列名称
 * springboot_root_queue
 */
public static final String QUEUE_NAME = "springboot_root_queue";

(2)创建通配符类型的交换机

/**
 * 创建交换机
 *
 * @return 交换机
 */
@Bean("bootExchange")
public Exchange bootExchange() {
    // 创建一个通配符的交换机
    return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}

这里需要在bean上加上名称(虽然如果没有时会使用方法名,但是严谨),便于之后交换机和队列绑定操作。

除了通配符交换机外,还支持广播型交换机定向型交换机

  • 广播型交换机
/**
 * 创建交换机
 *
 * @return 交换机
 */
@Bean("bootExchange")
public Exchange bootExchange() {
    // 创建一个通配符的交换机
    return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
  • 定向型交换机
@Bean("directExchange")
public Exchange directExchange() {
    return ExchangeBuilder.directExchange("direct_exchange").durable(true).build();
}

(3)创建一个队列

/**
 * 创建队列
 *
 * @return 队列
 */
@Bean("bootQueue")
public Queue bootQueue() {
    return QueueBuilder.durable(QUEUE_NAME).build();
}

(4)绑定交换机和队列

/**
 * 绑定队列和交换机
 * 主要:队列、交换机、routing key
 *
 * @return 绑定关系
 */
@Bean
public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) {
    return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
}

(5)完整配置类

@Configuration
public class RabbitMQConfig {
    /**
     * 默认测试的交换机机名称
     * springboot_topic_exchange
     */
    public static final String EXCHANGE_NAME = "springboot_topic_exchange";
    /**
     * 默认的队列名称
     * springboot_root_queue
     */
    public static final String QUEUE_NAME = "springboot_root_queue";
    /**
     * 创建交换机
     *
     * @return 交换机
     */
    @Bean("bootExchange")
    public Exchange bootExchange() {
        // 创建一个通配符的交换机
        return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
    }
    /**
     * 创建队列
     *
     * @return 队列
     */
    @Bean("bootQueue")
    public Queue bootQueue() {
        return QueueBuilder.durable(QUEUE_NAME).build();
    }
    /**
     * 绑定队列和交换机
     * 主要:队列、交换机、routing key
     *
     * @return 绑定关系
     */
    @Bean
    public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) {
        return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
    }
}

1.5 测试发送消息

@SpringBootTest
@RunWith(SpringRunner.class)
public class ProducerTest {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @Test
    public void testSend() {
        rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.name", "Spring Boot RabbitMQ");
    }
}

2.消费者SpringBootConsumer

2.1 创建工程并导入依赖

&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"&gt;
    &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
    &lt;parent&gt;
        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
        &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt;
        &lt;version&gt;2.5.6&lt;/version&gt;
        &lt;relativePath/&gt; &lt;!-- lookup parent from repository --&gt;
    &lt;/parent&gt;
    &lt;groupId&gt;com.example&lt;/groupId&gt;
    &lt;artifactId&gt;springboot-consumer&lt;/artifactId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
    &lt;name&gt;springboot-consumer&lt;/name&gt;
    &lt;description&gt;springboot-consumer&lt;/description&gt;
    &lt;properties&gt;
        &lt;java.version&gt;1.8&lt;/java.version&gt;
    &lt;/properties&gt;
    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-amqp&lt;/artifactId&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
            &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;org.springframework.amqp&lt;/groupId&gt;
            &lt;artifactId&gt;spring-rabbit-test&lt;/artifactId&gt;
            &lt;scope&gt;test&lt;/scope&gt;
        &lt;/dependency&gt;
    &lt;/dependencies&gt;
    &lt;build&gt;
        &lt;plugins&gt;
            &lt;plugin&gt;
                &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;
                &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt;
            &lt;/plugin&gt;
        &lt;/plugins&gt;
    &lt;/build&gt;
&lt;/project&gt;

PS:以上依赖是由springboot工程创建完成,和之前手动创建没有本质差别

2.2 创建配置文件并配置

SpringBoot配置文件名称为application.yml

需要配置的内容如下:

# 配置RabbitMQ的基本信息
spring:
  rabbitmq:
    # 地址
    host: 192.168.52.128
    # 端口
    port: 5672
    # 用户名
    username: admin
    # 密码
    password: admin
    # 虚拟机
    virtual-host: /test

2.3 创建项目启动类

@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

2.3 创建监听器

@Component
public class RabbitMQListener {
    @RabbitListener(queues = "springboot_root_queue")
    public void listenerQueue(Message message) {
        System.out.println("RabbitMQListener:" + new String(message.getBody()));
    }
}

@RabbitListener表示当前方法监听对应的队列,并且支持多队列。

2.4 run

控制台如下:

RabbitMQListener:Spring Boot RabbitMQ

到此这篇关于SpringBoot整合RabbitMQ示例详解的文章就介绍到这了,更多相关SpringBoot整合RabbitMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring使用AspectJ注解和XML配置实现AOP

    Spring使用AspectJ注解和XML配置实现AOP

    这篇文章主要介绍了Spring使用AspectJ注解和XML配置实现AOP的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java实现手写乞丐版线程池的示例代码

    Java实现手写乞丐版线程池的示例代码

    在这篇文章当中我们主要介绍实现一个非常简易版的线程池,深入的去理解其中的原理,麻雀虽小,五脏俱全,感兴趣的小伙伴快跟随小编一起学习学习吧
    2022-10-10
  • Spring监听器及定时任务实现方法详解

    Spring监听器及定时任务实现方法详解

    这篇文章主要介绍了Spring监听器及定时任务实现方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 基于java SSM springboot实现景区行李寄存管理系统

    基于java SSM springboot实现景区行李寄存管理系统

    这篇文章主要介绍了基于java SSM springboot实现的景区行李寄存管理系统,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • java poi 读取单元格null或者空字符串方式

    java poi 读取单元格null或者空字符串方式

    这篇文章主要介绍了java poi 读取单元格null或者空字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • SpringBoot项目中遇到的BUG问题及解决方法

    SpringBoot项目中遇到的BUG问题及解决方法

    这篇文章主要介绍了SpringBoot项目中遇到的BUG问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Java设计模式之模板方法模式详解

    Java设计模式之模板方法模式详解

    这篇文章主要为大家详细介绍了Java设计模式之模板方法模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • java.net.http.HttpClient使用示例解析

    java.net.http.HttpClient使用示例解析

    这篇文章主要为大家介绍了java.net.http.HttpClient使用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • IntelliJ IDEA 设置代码提示或自动补全的快捷键功能

    IntelliJ IDEA 设置代码提示或自动补全的快捷键功能

    这篇文章主要介绍了IntelliJ IDEA 设置代码提示或自动补全的快捷键功能,需要的朋友可以参考下
    2018-03-03
  • 详解Java中NullPointerException的处理方法

    详解Java中NullPointerException的处理方法

    这篇文章将带大家来单独看一个很常见的异常--空指针异常,这个可以说是每个Java程序员都必知的异常,所以我们不得不单独学习一下,文中有详细的代码示例,需要的朋友可以参考下
    2023-08-08

最新评论