RabbitMQ简单使用

RabbitMQ的使用(JAVA) Java快速上手的MQ上线! 阅读详情
AI摘要

本文是在Spring Boot项目中使用RabbitMQ的详细指南。介绍了RabbitMQ核心概念,包括消息队列、交换机等。说明了通过Docker安装、Spring Boot集成的步骤,以及消息的发送和接收方法。还阐述了交换机类型及使用场景,高级配置如消息确认、重试等,最后提及运行测试和注意事项。

以下是关于如何在 Spring Boot 项目中使用 RabbitMQ 的详细指南,涵盖核心概念、配置、代码实现及使用场景。


在这里插入图片描述

1. RabbitMQ 核心概念

  • 消息队列 (Message Queue):消息的存储容器,生产者发送消息到队列,消费者从队列中消费消息。
  • 交换机 (Exchange):接收生产者发送的消息,并根据路由规则将消息分发到队列。
  • 绑定 (Binding):定义交换机和队列之间的路由规则(通过路由键 routingKey)。
  • 消息确认 (Ack/Nack):确保消息可靠投递的机制(手动确认或自动确认)。

RabbitMQ 是一个开源的消息代理(Message Broker),基于 AMQP 协议实现异步通信。核心概念:

  • Producer:消息生产者
  • Consumer:消息消费者
  • Queue:消息存储队列
  • Exchange:路由消息到队列的组件
  • Binding:交换机和队列的绑定规则

2. 通过 Docker 安装(推荐)

# 拉取镜像
docker pull rabbitmq:3-management

# 启动容器(包含Web管理界面)
docker run -d --name rabbitmq \
  -p 5672:5672 \   # AMQP协议端口
  -p 15672:15672 \ # Web管理界面端口
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=admin \
  rabbitmq:3-management

3. Spring Boot 集成 RabbitMQ

步骤 1:添加依赖

在 pom.xml 中添加 Spring Boot 的 RabbitMQ 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
步骤 2:配置 RabbitMQ 连接

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

spring:
  rabbitmq:
    host: localhost    # RabbitMQ 服务器地址
    port: 5672        # 默认端口
    username: guest   # 默认用户名
    password: guest   # 默认密码
    virtual-host: /   # 虚拟主机

4. 发送消息(生产者)

定义交换机和队列

在配置类中声明交换机和队列的 Bean:

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

@Configuration
public class RabbitMQConfig {

    // 定义队列
    @Bean
    public Queue demoQueue() {
        return new Queue("demo.queue", true); // 队列名 + 是否持久化
    }

    // 定义直连交换机
    @Bean
    public DirectExchange demoExchange() {
        return new DirectExchange("demo.exchange");
    }

    // 绑定交换机和队列
    @Bean
    public Binding binding(Queue demoQueue, DirectExchange demoExchange) {
        return BindingBuilder.bind(demoQueue).to(demoExchange).with("demo.routingKey");
    }
}
发送消息

使用 RabbitTemplate 发送消息:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MessageProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String message) {
        // 发送到交换机,指定路由键
        rabbitTemplate.convertAndSend("demo.exchange", "demo.routingKey", message);
        System.out.println("消息已发送: " + message);
    }
}

5. 接收消息(消费者)

监听消息

使用 @RabbitListener 注解监听队列:

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

@Component
public class MessageConsumer {

    // 监听指定队列
    @RabbitListener(queues = "demo.queue")
    public void handleMessage(String message) {
        System.out.println("收到消息: " + message);
        // 业务处理逻辑
    }
}

6. 交换机类型及使用场景

(1) 直连交换机 (Direct Exchange)
  • 路由规则:精确匹配 routingKey。
  • 场景:订单处理(如 order.created 路由到订单队列)。
  • 使用:可以指定那些队列可以接受到交换机里面的消息。
    - ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/94295c663b77496eaa467889c013ed19.png
@Bean
public DirectExchange orderExchange() {
    return new DirectExchange("order.exchange");
}

@Bean
public Binding orderBinding(Queue orderQueue, DirectExchange orderExchange) {
    return BindingBuilder.bind(orderQueue).to(orderExchange).with("order.created");
}
(2) 主题交换机 (Topic Exchange)
  • 路由规则:通配符匹配(如 user.* 匹配 user.created 或 user.deleted)。
  • 场景:日志分类(如 logs.error 和 logs.info)。
  • 使用:通过主题来可以指定那些队列接受那些交换机里面的信息。
    在这里插入图片描述
@Bean
public TopicExchange logExchange() {
    return new TopicExchange("log.exchange");
}

@Bean
public Binding logBinding(Queue logQueue, TopicExchange logExchange) {
    return BindingBuilder.bind(logQueue).to(logExchange).with("logs.#");
}
(3) 广播交换机 (Fanout Exchange)
  • 路由规则:广播到所有绑定的队列,忽略 routingKey。
  • 场景:通知广播(如系统公告)。
  • 使用: 会通知到每个和广播交换机绑定的队列。
  • 在这里插入图片描述
@Bean
public FanoutExchange notificationExchange() {
    return new FanoutExchange("notification.exchange");
}

@Bean
public Binding notificationBinding(Queue emailQueue, FanoutExchange notificationExchange) {
    return BindingBuilder.bind(emailQueue).to(notificationExchange);
}

7. 高级配置

(1) 消息确认机制

在 application.yml 中开启手动确认:

spring:
  rabbitmq:
    listener:
      simple:
        acknowledge-mode: manual  # 手动确认

在消费者中手动确认消息:

@RabbitListener(queues = "demo.queue")
public void handleMessage(String message, Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) long tag) {
    try {
        System.out.println("收到消息: " + message);
        channel.basicAck(tag, false); // 确认消息
    } catch (IOException e) {
        channel.basicNack(tag, false, true); // 拒绝并重新入队
    }
}
(2) 消息重试

配置重试策略:

spring:
  rabbitmq:
    listener:
      simple:
        retry:
          enabled: true
          max-attempts: 3    # 最大重试次数
          initial-interval: 1000  # 初始重试间隔(ms)
(3) 死信队列 (DLX)

定义死信队列和绑定:

@Bean
public Queue demoQueue() {
    return QueueBuilder.durable("demo.queue")
            .withArgument("x-dead-letter-exchange", "dead.letter.exchange")  // 绑定死信交换机
            .withArgument("x-dead-letter-routing-key", "dead.letter.routingKey")
            .build();
}

8. 运行与测试

  1. 启动 RabbitMQ 服务:
    docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
    
  2. 访问管理界面:http://localhost:15672(用户名/密码:guest/guest)。
  3. 发送消息:
    @SpringBootApplication
    public class Application implements CommandLineRunner {
        @Autowired
        private MessageProducer producer;
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class, args);
        }
    
        @Override
        public void run(String... args) {
            producer.sendMessage("Hello RabbitMQ!");
        }
    }
    

9. 注意事项

  • 消息序列化:默认使用 SimpleMessageConverter,复杂对象需配置 Jackson2JsonMessageConverter。
  • 错误处理:通过 @RabbitListener(queues = "demo.queue", errorHandler = "customErrorHandler") 自定义错误处理。
  • 性能优化:合理设置线程池大小和预取数量(prefetch)。

通过以上步骤,你可以在 Spring Boot 项目中轻松集成 RabbitMQ,实现高效可靠的异步通信。

1、RabbitMQ的简单使用 1、AMQP AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。 2、RabbitMQ 1、Erlang语言 ... 阅读详情

相关推荐

RabbitMQ教程(安装与使用详解,Spring集成)

RabbitMQ教程,面试题。消息队列(MQ),本质是个队列,队列中存放的内容是message。MQ用于不同进程Process/线程Thread之间通信。本文介绍RabbitMQ的使用。RabbitMQ实战教程。

鸟哥哥的专栏 51万+

RabbitMQ使用详解

RabbitMQ 一. 简介 ​ RabbitMQ是用Erlang实现的一个高并发高可靠AMQP消息队列服务器。支持消息的持久化、事务、拥塞控制、负载均衡等特性,使得RabbitMQ拥有更加广泛的应用场景。RabbitMQ跟Erlang和AMQP有关。下面简单介绍一下Erlang和AMQP。 ​ Erlang是一门动态类型的函数式编程语言,它也是一门解释型语言,由Erlang虚拟机解释执行。从语言模型上说,Erlang是基于Actor模型的实现。在Actor模型里面,万物皆Actor,每个Actor都封

九离的博客 1万+

RabbitMQ原理(一):基础知识

微服务一旦拆分,必然涉及到服务之间的相互调用,目前我们服务之间调用采用的都是基于OpenFeign的调用。这种调用中,调用者发起请求后需要服务提供者执行业务返回结果后,才能继续执行后面的业务。也就是说调用者在调用过程中处于阻塞状态,因此我们成这种调用方式为,也可以叫。但在很多场景下,我们可能需要采用的方式,为什么呢?我们先来看看什么是同步通讯和异步通讯。如图:两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发微信可以同时与多个人收发微信,但是往往响应会有延迟。

Java+GO+JS全栈工程师-鹤冲天的博客:编程辅导~商务合作~技术交流 1961

RabbitMQ的详解和使用

一、AMQP协议 1、AMQP协议介绍 AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有RabbitMQ等。 2、功能范围 存储转发(多个消息发送者,单个消息接收者) 分布式事务(多个消息发送者,多个消息接收者) 发布订阅(多个消息发送者,多个消息

创作不易,请多支持,将为本站提供更多「有价值的文章」。 1万+

C51红外接收与发射控制及原理编码与解码

基于38khz的NEC协议红外发射简易电路图NEC协议产生红外光数据编码 0 1结合程序红外接收接收电路解码过程解码代码 红外发射 通过通过红外二极管发射红外光,三极管的状态来控制。 红外模块一般都是三个引脚,vcc,gnd,dat,通过控制dat口的来控制发射红外光。 简易电路图 将数据口连接到单片机的引脚为上,控制io口的电平状态,来控制三极管的导通状态,从而发射红外光。 NEC协议 NEC协议特点:8位地址和8位命令为提高可靠性,地址和命令都传输2次,脉冲间隔调制38kHz载波频率。 包含引导码,

yangfeng20的博客 1万+

SAP SD销售订单抬头自定义字段增强:BADI_SLS_HEAD_SCR_CUS实战指南

SAP ERP系统中的销售订单管理是企业核心业务流程,经常需要扩展标准功能来满足个性化业务需求。在SAP SD模块中,销售订单抬头屏幕的增强是常见需求。通过BADI(Business Add-In)技术,可以在不修改标准代码的前提下,实现自定义字段的添加与数据处理。本文详细介绍了如何使用BADI_SLS_HEAD_SCR_CUS实现销售订单抬头自定义字段,包括函数组子屏幕设计、数据存储表构建以及BADI方法的具体实现。这种增强方式适用于VA01/VA02/VA03等事务,保证了系统升级的兼容性和维护的便捷性

weixin_29758911的博客 349

RabbitMQ最全使用教程-小白也能看懂

我还通过一些渠道整理了一些大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。还有专门针对JVM、SPringBoot、SpringCloud、数据库、Linux、缓存、消息中间件、源码等相关面试题。

2401_84557521的博客 9174

pyinstaller+scrapy打包出现错误:OSError: could not get source code

错误如下: Traceback (most recent call last): File "scrapy\utils\defer.py", line 55, in mustbe_deferred File "scrapy\core\spidermw.py", line 60, in process_spider_input File "scrapy\core\scraper.py", line 152, in call_spider File "scrapy\utils\misc.py

kin的博客 1759

python对RabbitMQ的简单使用

python对RabbitMQ的简单使用(一)RabbitMQ的简介(二)RabbitMQ的安装(五)结语 (一)RabbitMQ的简介 RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信。而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ。

????爱好者的博客 1万+

HMC5883L磁力计驱动开发:I²C通信、校准与FreeRTOS集成

磁力计是惯性导航与电子罗盘系统的核心传感器,其输出原始磁场数据需经精确采集、单位换算与误差补偿才能用于姿态解算。基于各向异性磁阻(AMR)原理的三轴磁力计,如HMC5883L,依赖稳定I²C通信获取12位有符号磁场采样值,并通过增益配置、硬软铁校准及温度补偿提升物理量精度。在嵌入式实时系统中,驱动层须保障数据的时间一致性与抗干扰鲁棒性,避免总线挂死、字节错位或量程误配等典型问题。本文围绕HMC5883L这一广泛使用的停产但仍在产线服役的磁传感器,详解寄存器配置、定点单位转换、八方位校准算法及FreeRTOS

weixin_42594427的博客 145

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程

在Windows11下安装完Ubuntu20.04双系统后配置环境的过程 1.NVIDIA驱动检测及安装 2.Anaconda的安装 3.安装cuda、cudnn、pytorch 4.其他报错

aaaccc444的博客 2424

RabbitMQ的简单使用

MQ 的简单使用

qq_50846224的博客 315

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 227

Docker安装RabbitMQ以及简单使用

写在前面 为什么选择RabbitMQ? 市场上消息队列的组件有很多,ActiveMQ、RabbitMQ、RocketMQ、kafka等。我这里只是选择其中一种消息队列进行学习,如果你也在犹豫到底我要选择哪一个?可以看看这个 RabbitMQ安装 镜像检索以及下载 使用docker的搜索命令docker search rabbitmq在docker仓库中搜索RabbitMQ ,会搜索到如下结果: 我们选择第一个official的官方版本下载使用,不加后面的版本号就会下载最新的镜像 下载命令:docker

果然的博客 4878

safetymonitorapi

Summary of SA8653 Safety Monitor API Introduction This document details Safety Monitor APIs for the SA8653 QNNX platform, covering dual interfaces of APSS and SAIL. It defines core data structures and enumerations for subsystems, fault severity and health

qq_39257814的博客 1588

【网络与爬虫 41】TLS指纹伪造技术深度解析:ja3、ja4反检测与绕过策略

TLS指纹是现代反爬虫系统的重要检测手段,通过分析客户端TLS握手特征来识别爬虫。本文将深入解析ja3、ja4等TLS指纹技术原理,详细介绍指纹伪造和绕过策略,通过实际代码示例和工具使用,帮助开发者掌握TLS指纹反检测技术,构建更隐蔽的网络爬虫系统。

熵数实验室 1万+

rabbitmq系列1——安装并使用rabbitmq

🔥本篇概览:详细讲解了安装并使用rabbitmq,并讲解了数据隔离而生的的virtualhost。🌈⭕🔥

做一个善良的人,做好自己的事,如果愿意,再发一份光。 2103

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RabbitMQ 简单使用

根据下图所示,RabbitMQ的工作模式有六种 RabbitMQ 使用场景 服务解耦 假设有这样一个场景, 服务A产生数据, 而服务B,C,D需要这些数据, 那么我们可以在A服务中直接调用B,C,D服务,把数据传递到下游服务即可 但是,随着我们的应用规模不断扩大,会有更多的服务需要A的数据,如果有几十甚至几百个下游服务,而且会不断变更,再加上还要考虑下游服务出错的情况,那么A服务中调用代码的维护会极为困难 rabbitmq 基本概念 RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将

administratorqq的博客 233

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

RabbitMQ

二、RabbitMQ用户管理 2.1 逻辑结构 用户 虚拟主机 队列 2.2 用户管理 2.2.1 命令行用户管理 在linux中使用命令行创建用户 ## 进入到rabbit_mq的sbin目录 cd /usr/local/rabbitmq_server-3.7.0/sbin ## 新增用户 ./rabbitmqctl add_user ytao admin123 设置用户级别 ## 用户级别: ## 1.administrator 可以登录控制台、查看所有信息、可以对RabbitMQ进行管

qq_43587076的博客 3684

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

RabbitMQ的基本使用

RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。 一、消息队列 1、MQ:Message Queue释义 服务之间最常见的通信方式是直接调用彼此来通信,消息从一端发出后立即就可以达到另一端,称为即时消息通讯(同步通信) 消息从某一端发出后,首先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端,称为延迟消息通讯(异步通信) 2、消息队列特点.

qq_54936371的博客 3098

rabbitmq简单实用

1.启动rabbitmq (1)查看镜像:docker images 拓展: 查看运行的容器:docker ps 查看详细的容器信息:docker ps -a 删除镜像:docker rmi 镜像名称 查找某一个镜像:docker serach nginx(镜像名称) 查询所有运行过的容器id:docker ps -a -q 启动以运行过的容器:docker start 容器名称/容器id 启动所有运行过的容器:docker start `docker ps -a -q` 停止所有运

weixin_47427038的博客 1064

RabbitMQ安装及简单使用

RabbitMQ安装及简单使用

小何的博客 1319

【RabbitMQ】RabbitMQ的安装、主要参数、简单使用

在最近的项目中用到消息中间件RabbitMQ,接下来就记录一下RabbitMQ的安装过程。 消息中间件是开源高级消息队列协议(AMQP)的实现,服务器端使用的是Erlang语言来编写的,在安装RabbitMQ之前需要先安装一下Erlang。安装过程如下所示: 1、安装Erlang 根据自己的电脑系统选择相应的版本进行下载,安装过程与安装一般软件的过程一样。 2、进行Erlang环境变量的配置...

qgnczmnmn的博客 606
上一篇: 同步通信和异步通信的区别和使用场景
下一篇: Mybatis Plus详细使用讲解
小李不秃头♛
博客等级 码龄2年 619粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值