谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ

本文主要是介绍谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一,Spring整合RabbittMq的步骤
  • 二,AmqpAdmin使用
    • 1. `createExchange()`
    • 2. `testCreateQueue()`
    • 3. `createBinding()`
    • 4,发送消息

这一部分讲解Spring整合RabbitMq的步骤及其使用,包括:

  • 255-商城业务-消息队列-SpringBoot整合RabbitMQ
  • 256-商城业务-消息队列-AmqpAdmin使用
  • 257-商城业务-消息队列-RabbitTemplate使用

一,Spring整合RabbittMq的步骤

以下是基于这些信息的Spring整合RabbitMQ的步骤:

  1. 引入amqp场景:为了使用RabbitMQ,首先需要在项目中引入AMQP相关的依赖。如果你正在使用Maven或Gradle作为构建工具,你需要添加相应的RabbitMQ客户端库和Spring AMQP库到你的pom.xml(对于Maven)文件。
        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
  1. 自动配置:当引入了AMQP场景后,Spring Boot会自动加载RabbitAutoConfiguration类进行自动配置。这个过程将为容器创建以下组件:

    • RabbitTemplate:用于发送消息到RabbitMQ。
    • AmqpAdmin:提供了一些管理功能,如创建队列、交换机等。
    • CachingConnectionFactory:连接工厂,负责建立与RabbitMQ服务器的连接,并缓存它们以提高性能。
    • RabbitMessagingTemplate:提供了更高级的消息发送功能。
  2. 属性配置:所有的属性都通过@ConfigurationProperties(prefix = "spring.rabbitmq")注解进行配置。这意味着你可以通过在application.properties或application.yml文件中定义spring.rabbitmq.*前缀的属性来设置RabbitMQ的相关参数。

    spring:rabbitmq:host: 192.168.56.10port: 5672virtual-host: /
    
  3. 启用RabbitMQ支持:使用@EnableRabbit注解,把注解加载启动类上。

@EnableRabbit

在这里插入图片描述

二,AmqpAdmin使用

我们通过单元测试来试用RabbitmMq的Java客户端。

这三个方法都是测试方法,分别用于创建交换机、队列以及绑定关系。下面是每个方法的具体作用:

1. createExchange()

@Test
public void createExchange() {Exchange directExchange = new DirectExchange("hello-java-exchange", true, false);amqpAdmin.declareExchange(directExchange);log.info("Exchange[{}]创建成功:", "hello-java-exchange");
}
  • 作用: 创建一个名为 hello-java-exchange 的Direct类型的交换机。
  • 细节:
    • new DirectExchange("hello-java-exchange", true, false) 创建了一个Direct类型的交换机实例,其中 "hello-java-exchange" 是交换机的名称,true 表示它是持久化的(即使RabbitMQ重启后也不会丢失),false 表示它不是自动删除的(即不会在最后一个绑定到它的队列被删除后自动删除)。
    • amqpAdmin.declareExchange(directExchange) 使用 AmqpAdmin 实例的 declareExchange 方法来声明(创建)交换机。
    • log.info("Exchange[{}]创建成功:", "hello-java-exchange") 记录一条信息,表示交换机创建成功。

2. testCreateQueue()

@Test
public void testCreateQueue() {Queue queue = new Queue("hello-java-queue", true, false, false);amqpAdmin.declareQueue(queue);log.info("Queue[{}]创建成功:", "hello-java-queue");
}
  • 作用: 创建一个名为 hello-java-queue 的队列。
  • 细节:
    • new Queue("hello-java-queue", true, false, false) 创建了一个队列实例,其中 "hello-java-queue" 是队列的名称,true 表示它是持久化的,第一个 false 表示它不是独占的(独占队列只能被创建它的连接访问),第二个 false 表示它不是自动删除的(即不会在消费者断开连接后自动删除)。
    • amqpAdmin.declareQueue(queue) 使用 AmqpAdmin 实例的 declareQueue 方法来声明(创建)队列。
    • log.info("Queue[{}]创建成功:", "hello-java-queue") 记录一条信息,表示队列创建成功。

3. createBinding()

@Test
public void createBinding() {Binding binding = new Binding("hello-java-queue",Binding.DestinationType.QUEUE,"hello-java-exchange","hello.java",null);amqpAdmin.declareBinding(binding);log.info("Binding[{}]创建成功:", "hello-java-binding");}
  • 作用: 创建一个绑定关系,将队列 hello-java-queue 绑定到交换机 hello-java-exchange 上。
  • 细节:
    • new Binding("hello-java-queue", Binding.DestinationType.QUEUE, "hello-java-exchange", "hello.java", null) 创建了一个绑定实例,指定了队列 "hello-java-queue" 作为目的地类型 (Binding.DestinationType.QUEUE),交换机 "hello-java-exchange" 作为来源,路由键 "hello.java",以及没有额外的绑定参数。
    • amqpAdmin.declareBinding(binding) 使用 AmqpAdmin 实例的 declareBinding 方法来声明(创建)绑定。
    • log.info("Binding[{}]创建成功:", "hello-java-binding") 记录一条信息,表示绑定创建成功。

4,发送消息

这段代码通过RabbitMQ发送一个消息。

  1. 创建消息实体:

    OrderReturnReasonEntity reasonEntity = new OrderReturnReasonEntity();
    reasonEntity.setId(1L);
    reasonEntity.setCreateTime(new Date());
    reasonEntity.setName("reason");
    reasonEntity.setStatus(1);
    reasonEntity.setSort(2);
    
    • 这几行代码创建了一个 OrderReturnReasonEntity 类型的对象,并设置了它的属性。这个对象将作为消息发送到RabbitMQ。
  2. 发送消息:

rabbitTemplate.convertAndSend("hello-java-exchange", "hello2.java",reasonEntity, new CorrelationData(UUID.randomUUID().toString()));
  • rabbitTemplate 是一个实现了 RabbitTemplate 接口的对象,通常由Spring框架自动配置。

  • convertAndSend 方法用于发送消息。它有四个参数:

    • "hello-java-exchange" 是交换机的名称。
    • "hello2.java" 是路由键(routing key)。
    • reasonEntity 是要发送的消息体。
    • new CorrelationData(UUID.randomUUID().toString()) 是一个关联数据(CorrelationData),用于跟踪消息的状态。这里使用UUID生成了一个唯一标识符。
  • 在发送消息之前,rabbitTemplate 会自动将 reasonEntity 对象转换为字节流,通常使用JSON序列化的方式。因此,reasonEntity 必须实现 Serializable 接口或者能够被序列化工具如 Jackson 或 Gson 处理。

这篇关于谷粒商城实战笔记-255~256-商城业务-消息队列-SpringBoot整合RabbitMQ的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106775

相关文章

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B

如何在 Spring Boot 中实现 FreeMarker 模板

《如何在SpringBoot中实现FreeMarker模板》FreeMarker是一种功能强大、轻量级的模板引擎,用于在Java应用中生成动态文本输出(如HTML、XML、邮件内容等),本文... 目录什么是 FreeMarker 模板?在 Spring Boot 中实现 FreeMarker 模板1. 环

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll