如何在Spring Boot中集成RabbitMQ

这篇具有很好参考价值的文章主要介绍了如何在Spring Boot中集成RabbitMQ。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何在Spring Boot中集成RabbitMQ

在现代微服务架构中,消息队列(如RabbitMQ)扮演了关键的角色,它不仅能够提供高效的消息传递机制,还能解耦服务间的通信。本文将介绍如何在Spring Boot项目中集成RabbitMQ,实现生产者和消费者的基本配置。

步骤1:添加Maven依赖

首先,在你的Spring Boot项目的pom.xml中添加spring-boot-starter-amqp依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

这个starter包含了与RabbitMQ集成所需的所有基本依赖。

步骤2:配置RabbitMQ

在application.yml或application.properties中配置RabbitMQ的连接信息:

spring:
  rabbitmq:
    host: 10.5.2.27
    port: 30700
    username: user
    password: Sungrow@2023

步骤3:实现生产者

在Spring Boot中,发送消息到RabbitMQ的生产者可以很简单地通过RabbitTemplate实现:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.web.bind.annotation.*;
import com.alibaba.fastjson.JSONObject;

@RestController
@RequestMapping("/menu")
public class MenuController {

    @Resource
    private RabbitTemplate rabbitTemplate;

    @PostMapping("/add")
    public Result<SysPermission> add(@RequestBody SysPermission permission) {
        // ... 添加菜单的业务逻辑
        rabbitTemplate.convertAndSend(RabbitConstant.GOODS_EXCHANGE, RabbitConstant.MENU_MESSAGE, JSONObject.toJSONString(permission));
        return new Result<SysPermission>().success("添加成功!");
    }
}

这里,convertAndSend方法用于发送消息到指定的交换机和路由键。

步骤4:配置RabbitMQ交换机、队列和绑定

在Spring Boot中,可以通过配置类来定义交换机、队列和它们之间的绑定关系:

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {
    // 定义交换机、队列、路由键等常量
    // ... 

    @Bean
    public Queue queueA() {
        return new Queue(GOODS_QUEUE_A, true);
    }

    @Bean
    TopicExchange myExchange() {
        return new TopicExchange(GOODS_EXCHANGE);
    }

    @Bean
    Binding bindingA(Queue queueA, TopicExchange exchange) {
        return BindingBuilder.bind(queueA).to(exchange).with(GOODS_APP_ROUTING);
    }

    // 其他队列和绑定的定义
    // ...
}

这段代码定义了队列、交换机,并将它们通过路由键绑定起来。
有了配置后,启动服务,可以在rabbitmq控制台看到该交换机,队列以及他们之间的绑定
如何在Spring Boot中集成RabbitMQ,java,spring,java-rabbitmq,spring boot,rabbitmq
点进去后可以看到绑定的队列,
如何在Spring Boot中集成RabbitMQ,java,spring,java-rabbitmq,spring boot,rabbitmq
如何在Spring Boot中集成RabbitMQ,java,spring,java-rabbitmq,spring boot,rabbitmq
如果点进来,没有显示这个绑定队列,就说明配置的不对,后续也无法消费,点进队列后,就会显示队列中的消息了
如何在Spring Boot中集成RabbitMQ,java,spring,java-rabbitmq,spring boot,rabbitmq

步骤5:实现消费者

消费者用于处理接收到的消息。使用@RabbitListener注解可以很容易地实现:

import org.springframework.amqp.rabbit.annotation.RabbitListener;

@Component
public class MessageReceiver {

    @RabbitListener(bindings = @QueueBinding(
        value = @Queue(name = RabbitMQConfig.GOODS_QUEUE_A),
        exchange = @Exchange(name = RabbitMQConfig.GOODS_EXCHANGE, type = ExchangeTypes.TOPIC),
        key = RabbitMQConfig.GOODS_APP_ROUTING
    ))
    public void receiveAppMessage(Message message, Channel channel) {
        // 处理接收到的消息
        // ...
    }

    // 其他消费者方法
    // ...
}

这里,@RabbitListener注解定义了消息的监听和处理逻辑。

步骤6:处理死信队列

配置死信队列:

@Bean
public Queue deadQueue() {
    Map<String, Object> args = new HashMap<>();
    args.put("x-dead-letter-exchange", DEAD_EXCHANGE_A);
    args.put("x-dead-letter-routing-key", DEAD_ROUTING_KEY_A);
    return new Queue(DEAD_QUEUE_A, true, false, false, args);
}

@Bean
DirectExchange deadExchange() {
    return new DirectExchange(DEAD_EXCHANGE_A, true, false);
}

@Bean
Binding bindingDead(Queue deadQueue, DirectExchange deadExchange) {
    return BindingBuilder.bind(deadQueue).to(deadExchange).with(DEAD_ROUTING_KEY_A);
}

在RabbitMQ中,死信队列(Dead Letter Queue, DLQ)用于存储无法正常处理的消息。消息可能由于几种原因被发送到死信队列,包括:

消息被拒绝(Basic.Reject/Basic.Nack):当消费者明确拒绝消息且不重新排队时(通过设置requeue为false),消息会进入死信队列。

消息过期:如果消息在队列中存活时间超过设定的TTL(Time-To-Live),它会被自动发送到死信队列。

队列达到最大长度:如果队列设置了最大长度并达到这个限制,最老的消息可能会被移动到死信队列。

在Spring Boot集成的RabbitMQ应用中,通常会在消费者处理消息时发生异常的情况下,明确地将消息发送到死信队列。例如:

 
@RabbitListener(bindings = @QueueBinding(
    value = @Queue(name = RabbitMQConfig.GOODS_QUEUE_A),
    exchange = @Exchange(name = RabbitMQConfig.GOODS_EXCHANGE, type = ExchangeTypes.TOPIC),
    key = RabbitMQConfig.GOODS_APP_ROUTING
))
public void receiveAppMessage(Message message, Channel channel) throws IOException {
    try {
        // 处理消息
    } catch (Exception e) {
        // 处理消息失败,拒绝消息并不重新排队
        channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, false);
        // 将消息发送到死信队列
        rabbitTemplate.convertAndSend(RabbitMQConfig.DEAD_EXCHANGE_A, RabbitMQConfig.DEAD_ROUTING_KEY_A, message);
    }
}

在这个例子中,如果在处理消息的过程中发生异常,消息会被明确地拒绝,并发送到配置的死信队列。

为什么使用死信队列
避免消息丢失:死信队列确保无法处理的消息不会被丢失,而是存储在一个特定的地方,供进一步的检查和处理。
分析和调试:可以对死信队列中的消息进行分析,以确定为什么消息不能被正常处理。
避免重复处理无效消息:通过将无法处理的消息移动到死信队列,防止消费者重复尝试处理同一消息,这可能导致无限循环。
死信队列(DLQ)用于处理无法正常消费的消息。配置死信队列类似于配置普通队列,但需要一些额外的参数,如TTL(Time-To-Live)和死信交换机:文章来源地址https://www.toymoban.com/news/detail-759523.html


到了这里,关于如何在Spring Boot中集成RabbitMQ的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在 Spring Boot 中集成 MinIO 对象存储

    MinIO 是一个开源的对象存储服务器,专注于高性能、分布式和兼容S3 API的存储解决方案。本文将介绍如何在 Spring Boot 应用程序中集成 MinIO,以便您可以轻松地将对象存储集成到您的应用中。 安装minio 拉取 minio Docker镜像 创建minio数据和配置目录 运行minio容器,设置访问和密钥并

    2024年02月10日
    浏览(49)
  • RabbitMQ与Spring Boot如何集成?

    目录 一、RabbitMQ 二、Spring Boot 三、RabbitMQ与Spring Boot如何集成? RabbitMQ是一个开源的消息队列中间件,它实现了高效可靠的消息传递机制,可以在分布式系统中进行异步通信。它采用AMQP(Advanced Message Queuing Protocol)作为消息传输的协议,并提供了丰富的功能和灵活的配置选项

    2024年02月21日
    浏览(47)
  • spring boot rabbitmq 如何保持顺序消费

    RabbitMQ 是一个消息代理和队列功能的开源实现,可以帮助构建分布式应用程序。Spring Boot 集成 RabbitMQ 可以方便地在应用程序中使用消息队列,保持顺序消费可以通过以下方式来实现: 单线程消费:使用一个线程消费消息,因为 RabbitMQ 的队列是有序的,所以保证单线程的消费

    2024年02月09日
    浏览(43)
  • Spring Boot 中的 RabbitMQ 是什么,如何使用

    RabbitMQ 是一个开源的消息队列系统,它通过 AMQP(高级消息队列协议)来实现消息的传递。Spring Boot 是目前非常流行的 Java 开发框架,它提供了很多便利性的功能,其中就包括对 RabbitMQ 的支持。 在本文中,我们将介绍 RabbitMQ 的基本概念,以及如何在 Spring Boot 中使用 RabbitMQ。

    2024年02月12日
    浏览(48)
  • Spring Boot 中的 RabbitMQ 的消息接收配置是什么,原理,如何使用

    RabbitMQ 是一个流行的消息队列系统,它可以用于在应用程序之间传递消息。Spring Boot 提供了对 RabbitMQ 的支持,我们可以使用 Spring Boot 中的 RabbitMQ 消息接收配置来接收 RabbitMQ 中的消息。本文将介绍 RabbitMQ 的消息接收配置的原理和如何在 Spring Boot 中使用它。 在 RabbitMQ 中,消

    2024年02月13日
    浏览(48)
  • 【Spring Boot】Spring Boot集成RabbitMQ

    Spring Boot提供了`spring-boot-starter-amqp`组件,只需要简单地配置即可与Spring Boot无缝集成。下面通过示例演示集成RabbitMQ实现消息的接收和发送。 步骤01 配置pom包。 创建Spring Boot项目并在pom.xml文件中添加spring-bootstarter-amqp等相关组件依赖: 在上面的示例中,引入Spring Boot自带的

    2024年02月06日
    浏览(50)
  • [Spring boot] Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接

     🍳作者:天海奈奈 💭眼过千遍不如手锤一遍:推荐一款模拟面试,斩获大厂 o f f e r ,程序员的必备刷题平台 − − 牛客网  👉🏻点击开始刷题之旅 目录 什么是RabbitMQ   消息队列:接受并转发消息,类似于快递公司 消息队列的优点 消息队列的特性 RabbitMQ特点 RabbitMQ核

    2024年01月24日
    浏览(84)
  • Spring Boot 整合RabbitMQ

    第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Spring Cloud Netflix 之 Hystrix 第九章 代码管理gitlab 使用 第十章 Spr

    2024年02月05日
    浏览(51)
  • Spring boot集成RabbitMq

    RabbitMQ教程 输入erl,可以看到输出 cmd 打开 C:Program FilesRabbitMQ Serverrabbitmq_server-3.8.0sbin, 输入:rabbitmq-plugins enable rabbitmq_management 出现: 浏览器输入:localhost:15672 账号和密码都是guest 配置文件中的端口号不能是15672 配置文件: 查看当前的远程库 将xxx远程库简单命名origin,并且

    2024年02月10日
    浏览(54)
  • Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

    spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大

    2024年02月16日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包