深入浅出 RabbitMQ:简单队列实战指南

大家好,我是工藤学编程 🦉一个正在努力学习的小博主,期待你的关注
实战代码系列最新文章😉C++实现图书管理系统(Qt C++ GUI界面版)
SpringBoot实战系列🐷【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
分库分表分库分表之实战-sharding-JDBC分库分表执行流程原理剖析
消息队列深入浅出 RabbitMQ-核心概念介绍与容器化部署

前情摘要:

1、深入浅出 RabbitMQ-核心概念介绍与容器化部署


【亲测宝藏】发现一个让 AI 学习秒变轻松的神站!不用啃高数、不用怕编程,高中生都能看懂的人工智能教程来啦!

👉点击跳转,和 thousands of 小伙伴一起用快乐学习法征服 AI,说不定下一个开发出爆款 AI 程序的就是你!


本文章目录

  • 深入浅出 RabbitMQ:简单队列实战指南
    • 一、什么是RabbitMQ简单队列
    • 二、环境准备
    • 三、实战代码实现
      • 3.1 消息生产者(Send)
      • 3.2 消息消费者(Recv)
    • 四、关键知识点解析
    • 五、测试步骤
    • 六、总结

深入浅出 RabbitMQ:简单队列实战指南

一、什么是RabbitMQ简单队列

RabbitMQ作为主流的消息中间件,其核心功能是实现系统间的异步通信。简单队列(Simple Queue)是RabbitMQ中最基础的通信模式,采用"点对点"的消息传递方式:一个生产者发送消息到队列,一个消费者从队列中获取消息,适用于简单的异步通信场景。

二、环境准备

  1. RabbitMQ服务:参考深入浅出 RabbitMQ-核心概念介绍与容器化部署)

同时,为了方便环境之间的隔离(开发、测试、上线),我们需要按照如图添加一个虚拟环境

在这里插入图片描述

  1. 依赖配置:在Maven项目中添加AMQP客户端依赖
<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.10.0</version>
</dependency>

三、实战代码实现

3.1 消息生产者(Send)

生产者负责创建连接、声明队列并发送消息,核心代码如下:

public class Send {// 队列名称(生产者和消费者需使用相同名称)private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 1. 创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 配置连接参数factory.setHost("192.168.229.128");    // 服务器地址factory.setPort(5672);             // 端口(默认5672)factory.setUsername("admin");      // 用户名factory.setPassword("password");   // 密码factory.setVirtualHost("/dev");    // 虚拟主机(需提前创建)// 2. 创建连接和信道(使用try-with-resources自动关闭资源)try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {// 3. 声明队列(不存在则创建)/*** 参数说明:* 1. queue:队列名称* 2. durable:是否持久化(重启RabbitMQ后队列依然存在)* 3. exclusive:是否独占(仅当前连接可访问,连接关闭后自动删除)* 4. autoDelete:是否自动删除(当最后一个消费者断开后自动删除)* 5. arguments:额外参数(如队列长度限制等)*/channel.queueDeclare(QUEUE_NAME, false, false, false, null);// 4. 发送消息String message = "Hello World!";/*** 参数说明:* 1. exchange:交换机名称(使用默认交换机"")* 2. routingKey:路由键(默认交换机下需与队列名称一致)* 3. props:消息属性(如优先级、过期时间等)* 4. body:消息体(字节数组)*/channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));System.out.println(" [x] 已发送消息: '" + message + "'");}}
}

3.2 消息消费者(Recv)

消费者负责监听队列并处理消息,核心代码如下:

public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {// 1. 创建连接工厂(配置与生产者一致)ConnectionFactory factory = new ConnectionFactory();factory.setHost("192.168.229.128");factory.setUsername("admin");factory.setPassword("password");factory.setVirtualHost("/dev");  // 注意:需与生产者使用相同虚拟主机factory.setPort(5672);// 2. 创建连接和信道(消费者通常保持长连接,不使用自动关闭)Connection connection = factory.newConnection();Channel channel = connection.createChannel();// 3. 声明队列(与生产者保持一致,确保队列存在)channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] 等待接收消息中...(按CTRL+C退出)");// 4. 定义消息处理回调Consumer consumer = new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {// 消费标识(可用于标识当前会话)System.out.println("消费标识: " + consumerTag);// 消息元数据(包含交换机、路由键、消息ID等)System.out.println("元数据: " + envelope);// 消息属性(如发送时间、优先级等)System.out.println("属性: " + properties);// 消息内容System.out.println("接收内容: " + new String(body, "UTF-8"));}};// 5. 开始消费消息/*** 参数说明:* 1. queue:队列名称* 2. autoAck:是否自动确认消息(消费成功后自动通知MQ删除消息)* 3. consumer:消息处理回调*/channel.basicConsume(QUEUE_NAME, true, consumer);}
}

四、关键知识点解析

  1. 连接配置要点

    • 虚拟主机(VirtualHost):用于隔离不同项目的消息队列,生产者和消费者必须使用相同虚拟主机
    • 端口说明:5672是AMQP协议端口,15672是管理界面端口
  2. 队列声明参数

    • 持久化(durable):仅队列本身持久化,消息需额外设置持久化属性
    • 独占性(exclusive):通常用于临时队列,生产环境一般设为false
    • 自动删除(autoDelete):当最后一个消费者断开后自动清理队列,适合临时任务
  3. 消息确认机制

    • 代码中使用autoAck=true(自动确认):消息被接收后立即从队列删除
    • 生产环境建议使用autoAck=false(手动确认):确保消息被正确处理后再删除,避免消息丢失

五、测试步骤

  1. 启动RabbitMQ服务:rabbitmq-server start

  2. 访问管理界面(http://localhost:15672),确认虚拟主机/dev已创建

  3. 先运行消费者(Recv):启动后进入监听状态
    在这里插入图片描述

  4. 再运行生产者(Send):发送消息后控制台输出发送成功
    在这里插入图片描述

  5. 查看消费者控制台:成功接收并打印消息详情
    在这里插入图片描述

六、总结

通过本文实战,我们掌握了RabbitMQ简单队列的核心用法:

  • 生产者通过信道发送消息到队列
  • 消费者通过回调函数异步处理消息
  • 虚拟主机和队列参数的正确配置是通信基础

简单队列适合一对一的消息通信场景,下一篇我们将讲解工作队列(Work Queue),敬请关注!

觉得有用请点赞收藏!
如果有相关问题,欢迎评论区留言讨论~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/91815.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/91815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu22-Qt Creator-fcitx-中文输入

fcitx在ubuntu系统中路径 /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/ /usr/lib/x86_64-linux-gnu/qt6/plugins/platforminputcontexts/ fcitx-qt5-1.2.7 编译 下载链接:https://github.com/fcitx/fcitx-qt5/archive/refs/tags/1.2.7.zip Qt版本:Qt C…

【Java基础|第十三篇】面向对象基础(三)——继承(一)继承的理解,实现,特点……

&#xff08;四&#xff09;面向对象&#xff1a; 5、继承&#xff1a; &#xff08;1&#xff09;理解&#xff1a; 概念&#xff1a; 继承是面向对象的三大特征之一 继承是类与类之间关系的一种&#xff08;是父类与子类的关系&#xff09; 使用场景&#xff1a; 一个类与另…

QGIS绿色版吉林一号切片体验版插件(Jilin1Tiles)更新

吉林一号更新2024年图源了但吉林一号切片体验版插件&#xff08;Jilin1Tiles&#xff09;还没有更新&#xff0c;我修改了一下代码&#xff0c;直接集成到QGIS绿色版中。如下&#xff1a;注意&#xff1a;第一次使用的时候需要选中启用一下插件&#xff1a;需要使用的可以直接下…

git操作命令和golang编译脚本

git子模块信息处理命令git init submodule git submodule updategit取消合并 git merge --abort git reset --hard HEAD{1}bat文件生成二进制set GOOSlinux set GOARCHamd64 go env -w GOFLAGS-modvendor go build -ldflags "-w -s" -ohallapiset GOOSlinux set GOAR…

通往L4之路:构建自我进化的智能驾驶决策大脑

摘要&#xff1a; 本文旨在提出一个超越当前主流“感知-预测-规划”分离式架构的下一代自动驾驶决策系统方案。面对自动驾驶领域最核心的“长尾场景”难题&#xff0c;本文借鉴并升华了一套源于复杂策略制定的决策智能框架&#xff0c;通过构建动态驾驶世界模型&#xff08;Dyn…

AI编程助手:终结996的新希望

引言程序员工作现状与“996”现象的普遍性AI技术快速发展对编程效率的潜在影响核心问题&#xff1a;AI IDE与AI辅助编程能否改变传统开发模式AI IDE与AI辅助编程的核心技术AI IDE的定义与功能&#xff08;代码补全、错误检测、自动重构等&#xff09;AI辅助编程工具&#xff08…

Anthropic 禁止 OpenAI 访问 Claude API:商业竞争与行业规范的冲突

Anthropic 禁止 OpenAI 访问 Claude API&#xff1a;商业竞争与行业规范的冲突 文章来源&#xff1a;Poixe AI 本周&#xff0c;美国 AI 公司 Anthropic 宣布禁止 OpenAI 通过 API 访问其 Claude 系列大模型。这一举动引发了行业对"友好基准测试"与商业竞争边界的热…

区块链 + 物联网落地案例:供应链溯源系统开发全记录

本文详细记录了区块链与物联网技术融合的供应链溯源系统开发全流程。从项目背景出发&#xff0c;阐述传统供应链溯源痛点&#xff0c;介绍系统开发的技术架构设计&#xff0c;包括物联网数据采集层、区块链数据存储层等核心模块&#xff0c;详解硬件选型、智能合约编写、数据上…

Windows环境下Intel Fortran如何安装配置NetCDF

NetCDF(Network Common Data Form)格式,简称nc格式,是一种自描述、与平台无关的二进制数据文件,特别适合多维数据的存储和交换,广泛应用于气象、海洋、地球科学等领域。本文介绍Windows环境下IntelFortran安装配置NetCDF的过程。 一、系统环境及准备工作 1. 系统 Wind…

tcp/udp的socket特点

tcp &#xff1a; 绑定一个 socket 只是用来监听&#xff0c;accept 对每个客户端生成一个 socket 用来维护滑动窗口等。每个客户端用一个 socket 用来维护滑动窗口等。 4 次挥手对应两次 close 的 fin 和返回的 ack。 而三次挥手在 connect 里阻塞完成。 ​udp &#xff1a; 双…

Linux命令top

top一、 命令二、 如何查看top输出的结果一、 命令 top命令是Linux中的一个实时进程监控工具&#xff0c;类似于windows中的任务管理器。 基本命令 top二、 如何查看top输出的结果 我们需要分析top输出的结果 top输出的结果分为上下两部分&#xff0c;先看上半部分 第一行是…

Perl 数据库连接

Perl 数据库连接 概述 Perl是一种强大的编程语言&#xff0c;广泛应用于文本处理、系统管理、网络编程等领域。随着数据库技术的快速发展&#xff0c;Perl与数据库的结合也日益紧密。本文将详细介绍Perl数据库连接的相关知识&#xff0c;包括常用的数据库类型、连接方法以及一些…

jenkins从入门到精通-P1—九五小庞

1. jenkins的两个核心为CI持续集成 CD持续部署2.jenkins在企业工作中的流程3. 学习的内容包括

第九节 Redis 事务、Redis 脚本

Redis 事务可以一次执行多个命令&#xff0c; 并且带有以下两个重要的保证&#xff1a; 事务是一个单独的隔离操作&#xff1a;事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中&#xff0c;不会被其他客户端发送来的命令请求所打断。事务是一个原子操作&#x…

托福阅读37-2

托福阅读37-2 1.reinforcement from reintroduction定位到倒数第二句&#xff0c;这里我没看懂former和term&#xff0c;直接懵掉了&#xff0c;然后往后看。这句话其实省略了&#xff0c;补充完应该是The former is termed reintroduction and the latter is termed reinforce…

docker-compose一键部署Springboot+Vue前后端分离项目

1. 背景说明 后端使用JDK8&#xff0c;前端为普通Vue项目前端访问后端接口&#xff0c;统一带了前缀/api 2. 项目配置 2.1 后端 yml文件里配置统一访问前缀/api2.2 前端 API路径配置为相对路径&#xff1a;说明&#xff1a;我这边前后端应用都是部署在同一台服务器上&#xff0…

Unity_数据持久化_XML基础

Unity数据持久化 三、XML数据持久化 3.1 XML基础概念 3.1.1 什么是XML XML&#xff08;eXtensible Markup Language&#xff09;**是一种可扩展的标记语言&#xff0c;用于存储和传输数据。它具有以下特点&#xff1a; 结构化&#xff1a;数据以层次结构组织可读性&#xff1a;…

大语言模型的解码策略:贪婪解码与波束搜索

在自然语言生成任务&#xff08;如机器翻译、文本摘要、图像描述等&#xff09;中&#xff0c;语言模型通常会输出一个词的概率分布&#xff0c;但模型本身并不会自动告诉你应该选哪些词作为最终的输出句子。因此&#xff0c;我们需要设计一个“解码策略”来从这些概率中生成可…

智慧园区:中小企业的 “减压阀” 与数字化招商革命

在当前的经济环境下&#xff0c;中小企业的生存发展面临着诸多挑战&#xff0c;其中选址成本俨然成为了创业路上的 “第一道坎”。传统招商模式中&#xff0c;信息不对称的问题尤为突出&#xff0c;初创企业常常因此陷入选址失误的困境。有的企业选在交通不便的地方&#xff0c…

从零开始配置pytorch环境

总结了一下几篇热门文章和自己的经验&#xff0c;方便以后换设备配置环境 一、安装Anaconda 这一步是为了不污染全局环境&#xff0c;很有必要。 直接清华源镜像下载&#xff1a;Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 根据自…