RabbitMQ深入解析与实践

news/2025/2/8 6:01:26/

✅作者简介:热爱Java后端开发的一名学习者,大家可以跟我一起讨论各种问题喔。
🍎个人主页:Hhzzy99
🍊个人信条:坚持就是胜利!
💞当前专栏:微服务
🥭本文内容:微服务的学习


文章目录

  • RabbitMQ深入解析与实践
    • 1. 引言
    • 2. RabbitMQ简介
    • 3. 在Spring Boot中使用RabbitMQ
      • 3.1 添加依赖
      • 3.2 配置RabbitMQ
      • 3.3 发送消息
      • 3.4 接收消息
    • 4. RabbitMQ的高级特性
      • 4.1 消息确认
      • 4.2 消费者确认
      • 4.3 死信队列
    • 5. 结论


RabbitMQ深入解析与实践

1. 引言

RabbitMQ是一个开源的消息代理和队列服务器,用于通过普通协议在分布式环境中传递消息。它支持多种消息协议,使得应用程序可以通过共享队列的方式进行异步处理,从而实现应用程序的解耦。本文将深入探讨RabbitMQ的主要特性和核心概念,以及如何在实际项目中使用RabbitMQ进行消息处理。

2. RabbitMQ简介

RabbitMQ是一个基于AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,支持多种编程语言和多种消息协议,具有灵活路由、负载均衡、队列持久化、消息确认、高可用等特性。

RabbitMQ的主要组件包括:

  • 生产者(Producer):消息的发送者,将消息发布到交换器。
  • 交换器(Exchange):接收生产者发送的消息,根据路由规则将消息路由到一个或多个队列。
  • 队列(Queue):存储消息的数据结构,等待消费者来消费消息。
  • 消费者(Consumer):消息的接收者,从队列中获取并消费消息。

3. 在Spring Boot中使用RabbitMQ

Spring Boot提供了对RabbitMQ的强大支持,通过Spring Boot,我们可以很方便地在项目中使用RabbitMQ。

3.1 添加依赖

首先,我们需要在项目的pom.xml文件中添加spring-boot-starter-amqp的依赖:

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

3.2 配置RabbitMQ

然后,在application.yml文件中配置RabbitMQ的相关信息:

spring:rabbitmq:host: localhostport: 5672username: guestpassword: guest

3.3 发送消息

在Spring Boot中,我们可以通过AmqpTemplate来发送消息。下面是一个简单的示例:

@RestController
public class RabbitmqController {@Autowiredprivate AmqpTemplate amqpTemplate;@GetMapping("/send")public String send() {String message = "Hello, RabbitMQ!";amqpTemplate.convertAndSend("exchange", "routingkey", message);return "Message sent!";}
}

在这个例子中,我们通过convertAndSend方法将消息发送到指定的交换器,并指定路由键。

3.4 接收消息

我们也可以使用@RabbitListener注解来监听队列,并自动接收和处理队列中的消息。

@Component
public class RabbitmqReceiver {@RabbitListener(queues = "queue")public void receive(String message) {System.out.println("Received: " + message);}
}

在这个例子

中,我们在receive方法上添加了@RabbitListener注解,并指定监听的队列。当队列中有新的消息时,receive方法会被自动调用,参数message就是队列中的消息。

4. RabbitMQ的高级特性

除了基本的消息发送和接收,RabbitMQ还提供了许多高级特性,如消息确认、消费者确认、死信队列、消息持久化、优先级队列等。

4.1 消息确认

消息确认是确保消息从生产者成功发送到交换器的一种机制。在RabbitMQ中,生产者可以设置消息为可确认的,当消息成功发送到交换器后,RabbitMQ会给生产者发送一个确认消息。

在Spring Boot中,我们可以通过RabbitTemplatesetConfirmCallback方法来设置确认回调函数。

rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {if (ack) {System.out.println("Message confirmed");} else {System.out.println("Message not confirmed: " + cause);}
});

4.2 消费者确认

消费者确认是确保消息从队列成功投递到消费者的一种机制。在RabbitMQ中,消费者在消费消息后,需要向RabbitMQ发送一个确认消息,告知RabbitMQ该消息已经被成功消费,RabbitMQ才会从队列中删除该消息。

在Spring Boot中,我们可以在@RabbitListener注解的方法中添加Channel参数,并通过basicAck方法来确认消息。

@RabbitListener(queues = "queue")
public void receive(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {System.out.println("Received: " + message);channel.basicAck(tag, false);
}

4.3 死信队列

死信队列用于存储不能被正常消费的消息。当消息因为以下原因不能被消费时,RabbitMQ会将消息发送到死信队列:

  1. 消息被拒绝,并且设置了不重新投递。
  2. 消息过期。
  3. 队列达到最大长度。

我们可以通过x-dead-letter-exchangex-dead-letter-routing-key参数来设置队列的死信交换器和死信路由键。

Map<String, Object> args = new HashMap<>();
args.put("x-dead-letter-exchange", "dead-letter-exchange");
args.put("x-dead-letter-routing-key", "dead-letter-routing-key");
new Queue("queue", true, false, false, args);

5. 结论

RabbitMQ是一个强大的消息中间件,支持多种消息模式,提供了丰富的特性,能够满足大部分消息处理的需求。通过Spring Boot,我们可以方便地在项目中使用RabbitMQ。希望通过本文,你可以理解了RabbitMQ的主要特性和核心概念,并能在自己的项目中使用RabbitMQ进行消息处理。


http://www.ppmy.cn/news/153047.html

相关文章

使用APIPOST 进行压力测试

使用APIPOST 进行压力测试 目录概述需求&#xff1a; 设计思路实现思路分析1.apipost 压力测试 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for c…

C语言----类型强转

在C语言代码中我们经常会遇到对变量进行类型强转&#xff0c;如果没有深入理解类型强转&#xff0c;很容易引入代码bug&#xff0c;这里总结一下C语言里的类型强转。 1&#xff09;符号扩展&#xff1a;对于要扩展量为有符号数&#xff0c;扩展存储位数的方法。在新的高位字节…

韩国公布新型多功能掌上游戏机

转自: 天极 http://rss.yesky.com/RSS_redirect.htm?yy***&amp;toURLhttp://tvgame.yesky.com/174/2215674.shtml 韩国公司Cenix即将发布一款新掌上游戏机GMP-M6&#xff0c;大小将和任天堂GameBoy Micro相当&#xff0c;除了掌机功能外还将提供PMP、MP3播放器能力。 这款…

掌上游戏机项目开源

描述 这是一个有四款游戏的掌上游戏机&#xff0c;游戏有俄罗斯方块、贪吃蛇、赛车、打砖块。 主控单片机使用的是STC15F2K60S2&#xff0c;数码管是共阴的&#xff0c;共阳点阵&#xff08;1脚为&#xff09;&#xff08;点阵有字的一边朝下&#xff0c;左下角为1脚&#xff…

单片机设计_贪吃蛇游戏(AT89C51)

51单片机游戏&#xff08;贪吃蛇&#xff09; 想要更多项目私wo!!! 一、电路设计 此电路由AT89C51最小系统、74HC595位移缓存器、8*8点阵LED屏和按键组成。 74HC595位移缓存器 74HC595是一个8位串行输入、并行输出的位移缓存器&#xff1a;并行输出为三态输出。在SCK 的上升…

如果有一天,掌上游戏机的屏幕可以卷起来……

随着智能手机以及手机游戏的发展&#xff0c;已经把当年像PSP、PSV这样火爆一时的掌上游戏机彻底钉在了历史的长河底下&#xff0c;现在还剩下的掌机就都是那种把当年的小霸王游戏或者仙剑1代这种像素游戏装进去的掌上红白机&#xff0c;怀旧玩玩还行&#xff0c;一直玩就会无聊…

搭建掌上游戏开发环境

PSP、GBA等游戏的开发环境&#xff0c;这个环境是PS2DEV社区 通过反向工程弄出来的SDK&#xff0c;PSP SDK在开发时的一个目标就是完全合法化。这意味着没有一行代码是从泄露的商业SDK中拿来的。PSP SDK中的任何内容都是通过反向工程firmware和已经发布的游戏得来的。下载安装d…

【单片机开发】基于stm32的掌上游戏机设计 (俄罗斯方块)

项目相关链接&#xff1a; 1.STM32掌机&#xff1a;音乐播放器 2.STM32掌机&#xff1a;贪吃蛇 3.STM32掌机&#xff1a;俄罗斯方块 &#xff08;一&#xff09;效果展示 思想上也就是创造一个二维矩阵&#xff0c;对LCD与矩阵同时操作&#xff0c;通过矩阵判断状态&#xff…