当前位置: 首页 > news >正文

Spring Boot整合RabbitMQ

1. 环境准备

  • Spring Boot 2.1.3.RELEASE
  • RabbitMQ 3.x
  • JDK 8 或以上
  • Maven 3.5+

2. 安装Erlang、RabbitMQ

2.1 安装前准备

RabbitMQ 依赖 Erlang 环境,需确保两者的版本匹配,官方兼容性参考:RabbitMQ & Erlang 版本对照表‌。

2.2 下载安装包‌

  • Erlang RPM 包‌:从 GitHub Releases 或 RabbitMQ 官方仓库 下载对应版本‌。
  • RabbitMQ RPM 包‌:从 RabbitMQ 官网 下载与 Erlang 兼容的版本‌。

我这里直接下载的otp_src_26.1.tar.gz压缩包文件

2.1 安装Erlang

  1. 解压 otp_src_26.1.tar.gz
tar -xvzf otp_src_${ERLANG_VERSION}.tar.gz
cd otp_src_${ERLANG_VERSION}
  1. 安装 Erlang 需要一些依赖库
  • Debian/Ubuntu
sudo apt update
sudo apt install -y build-essential autoconf libncurses5-dev libssl-dev libwxgtk3.0-gtk3-dev libwxbase3.0-dev libwxgtk3.0-dev libgl1-mesa-dev libglu1-mesa-dev libpng-dev libssh-dev unixodbc-dev xsltproc fop libxml2-utils
  • CentOS/Rocky Linux
sudo yum groupinstall -y "Development Tools"
sudo yum install -y epel-release
sudo yum install -y ncurses-devel openssl-devel wxBase wxGTK3 wxGTK3-devel libpng-devel unixODBC-devel libxslt fop libxml2
  1. 运行 ./configure 以检查系统环境,并生成 Makefile:
./configure --prefix=/usr/local/erlang --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac
•	--prefix=/usr/local/erlang 指定安装目录
•	--enable-threads 允许多线程支持
•	--enable-smp-support 允许多核 CPU 并行支持
•	--enable-kernel-poll 启用内核轮询(提高 I/O 性能)
•	--enable-hipe 启用 HiPE(高性能 Erlang 虚拟机)
•	--without-javac 不编译 Java 相关功能(可选)
  1. 编译:
make -j$(nproc)  # 使用所有 CPU 核心进行编译
  1. 安装
sudo make install
  1. 配置环境变量
echo 'export PATH=/usr/local/erlang/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
  1. 验证安装结果:在这里插入图片描述

2.2 安装RabbitMQ

  1. 添加 RabbitMQ 官方仓库
# 添加 RabbitMQ 仓库密钥  
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq.gpg  
# 添加 RabbitMQ 软件源
echo "deb [signed-by=/usr/share/keyrings/rabbitmq.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list  
# 更新软件包列表
sudo apt update  

在这里插入图片描述

  1. 安装 RabbitMQ 3.8.x 版本
# 列出可用的 RabbitMQ 版本
apt-cache madison rabbitmq-server
# 从输出中找到 3.8.x 系列的版本号:
sudo apt install -y rabbitmq-server=3.8.2-0ubuntu1
  1. 启动 RabbitMQ 服务:sudo systemctl start rabbitmq-server

  2. 设置开机自启:sudo systemctl enable rabbitmq-server

  3. 使用 RabbitMQ 的 Web 管理界面,可以启用管理插件(可选):sudo rabbitmq-plugins enable rabbitmq_management

  4. 验证安装:sudo systemctl status rabbitmq-server

在这里插入图片描述

通过浏览器访问 http://服务器IP地址:15672,使用默认用户名 guest 和密码 guest 登录管理界面。不过需要注意的是,guest 用户默认只能通过本地访问,如果需要远程访问,需要创建新用户并授予相应权限。

在这里插入图片描述

2.2 开启远程访问

2.2.1 创建新用户

使用 rabbitmqctl 命令来创建新用户,命令格式如下:

sudo rabbitmqctl add_user <用户名> <密码>

例如,创建一个名为 admin,密码为 admin123 的用户:

sudo rabbitmqctl add_user admin admin123
2.2.2 设置用户角色

RabbitMQ 有几种不同的用户角色,每个角色具有不同的权限:

  • administrator:可以管理所有方面,包括用户、虚拟主机、权限等。
  • monitoring:可以查看 RabbitMQ 节点的监控信息。
  • policymaker:可以管理策略和参数。
  • management:可以访问管理界面。
  • none:没有特殊权限。

使用以下命令为用户设置角色:

sudo rabbitmqctl set_user_tags <用户名> <角色>

如果要将 admin 用户设置为 administrator 角色,可以执行:

sudo rabbitmqctl set_user_tags admin administrator
2.2.3 授予用户权限

用户需要对特定的虚拟主机(Virtual Host)具有相应的权限才能进行操作。默认情况下,RabbitMQ 有一个名为 / 的虚拟主机。可以使用以下命令为用户授予权限:

sudo rabbitmqctl set_permissions -p <虚拟主机名> <用户名> ".*" ".*" ".*"

其中,三个 ".*" 分别表示对虚拟主机的配置(configure)、写入(write)和读取(read)权限。如果要为 admin 用户授予对 / 虚拟主机的所有权限,可以执行:

sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
2.2.4 验证用户权限

你可以使用新创建的用户登录 RabbitMQ 的管理界面(http://服务器IP地址:15672),或者使用客户端工具(如 pika 等)连接到 RabbitMQ 服务器,验证是否可以正常访问。

2.2.5 删除默认 guest 用户(可选)

为了提高安全性,如果你已经创建了新的管理员用户,可以考虑删除默认的 guest 用户:

sudo rabbitmqctl delete_user guest

通过以上步骤,就可以创建新用户并授予相应权限,实现 RabbitMQ 的远程访问。
在这里插入图片描述

3. 添加Spring Boot RabbitMQ依赖

在pom.xml中添加依赖:

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Spring Boot RabbitMQ --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
</dependencies>

执行mvn clean install

4. 配置RabbitMQ

在application.yml中添加连接配置:

spring:rabbitmq:host: 10.211.55.5port: 5672username: adminpassword: admin123virtualHost: /

5. 定义消息队列

5.1 创建RabbitMqConfig.java,定义交换机、队列和绑定:

import org.springframework.amqp.core.*;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMqConfig {public static final String EXCHANGE_NAME = "test-exchange";public static final String ROUTING_KEY = "test-routing-key";public static final String QUEUE_NAME = "test-queue";@Beanpublic MessageConverter jsonMessageConverter() {return new Jackson2JsonMessageConverter();}// 创建队列@Beanpublic Queue queue() {/*** @param name 队列名字* @param durable 声明一个持久队列(该队列将在服务器重启后继续存在),则为true*/return new Queue(QUEUE_NAME, true);}// 创建交换机(Direct类型)@Beanpublic DirectExchange exchange() {return new DirectExchange(EXCHANGE_NAME);}// 绑定队列到交换机@Beanpublic Binding binding() {return BindingBuilder.bind(queue()).to(exchange()).with(ROUTING_KEY);}
}

5.2 生产者(Producer)

创建RabbitMqProducer.java发送消息:

import com.example.rabbitmq.config.RabbitMqConfig;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class RabbitMqProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendMessage(String message) {rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, RabbitMqConfig.ROUTING_KEY, message);}
}

5.3 创建API测试发送消息

创建MessageController.java测试:

import com.example.rabbitmq.producer.RabbitMqProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/message")
public class MessageController {@Autowiredprivate RabbitMqProducer producer;@GetMapping("/send")public String sendMessage(@RequestParam String msg) {producer.sendMessage(msg);return "Message sent: " + msg;}
}

访问http://localhost:8080/message/send?msg=Hello RabbitMQ测试。

在这里插入图片描述

5.4 消费者(Consumer)

创建RabbitMqConsumer.java接收消息:

import com.example.rabbitmq.config.RabbitMqConfig;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class RabbitMqConsumer {@RabbitListener(queues = RabbitMqConfig.QUEUE_NAME)public void receiveMessage(String message) {System.out.println("Received message: " + message);}
}

重新启动项目,控制台应输出:

Received message: Hello RabbitMQ

6. 发送对象消息

6.1 定义消息对象

import java.io.Serializable;public class CustomMessage implements Serializable {private static final long serialVersionUID = 1L;private String content;private int id;public CustomMessage() {}public CustomMessage(String content, int id) {this.content = content;this.id = id;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}public int getId() {return id;}public void setId(int id) {this.id = id;}@Overridepublic String toString() {return "CustomMessage{id=" + id + ", content='" + content + "'}";}
}

6.2 发送对象

import com.weigang.config.RabbitMqConfig;
import com.weigang.model.CustomMessage;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class RabbitMqProducer {@Autowiredprivate RabbitTemplate rabbitTemplate;public void sendMessage(String message) {rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, RabbitMqConfig.ROUTING_KEY, message);}public void sendObjectMessage(CustomMessage message) {rabbitTemplate.convertAndSend(RabbitMqConfig.EXCHANGE_NAME, RabbitMqConfig.ROUTING_KEY, message);}}

6.3 通过API发送对象

@GetMapping("/sendObj")
public String sendMessage(@RequestParam Integer id,@RequestParam String content) {CustomMessage customMessage = new CustomMessage(content, id);producer.sendObjectMessage(customMessage);return "Message sent: " + customMessage;
}

然后访问:http://localhost:8080/message/sendObj?id=1001&content=Hello RabbitMQ
在这里插入图片描述

6.4 消费对象

import com.weigang.config.RabbitMqConfig;
import com.weigang.model.CustomMessage;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class RabbitMqConsumer {@RabbitListener(queues = RabbitMqConfig.QUEUE_NAME)public void receiveMessage(String message) {System.out.println("Received message: " + message);}@RabbitListener(queues = RabbitMqConfig.QUEUE_NAME)public void receiveMessageObj(CustomMessage message) {System.out.println("Received object message: " + message.toString());}
}

重新启动项目,控制台应输出:

Received object message: CustomMessage{content='Hello RabbitMQ', id=1001}

相关文章:

Spring Boot整合RabbitMQ

1. 环境准备 Spring Boot 2.1.3.RELEASERabbitMQ 3.xJDK 8 或以上Maven 3.5 2. 安装Erlang、RabbitMQ 2.1 安装前准备 RabbitMQ 依赖 Erlang 环境&#xff0c;需确保两者的版本匹配&#xff0c;官方兼容性参考&#xff1a;RabbitMQ & Erlang 版本对照表‌。 2.2 下载安…...

CDefView::_OnFSNotify函数分析

进入CDefView::_OnFSNotify函数时状态栏 _UpdateStatusBar函数之后增加一个对象&#xff0c;变成7个对象。 LRESULT CDefView::_OnFSNotify(LONG lNotification, LPCITEMIDLIST* ppidl) { LPITEMIDLIST pidl; LPCITEMIDLIST pidlItem; // we may be registered for no…...

精准汇报:以明确答复助力高效工作

在工作场景中&#xff0c;汇报工作是一项至关重要的沟通环节&#xff0c;它不仅关乎工作进展的有效传达&#xff0c;更影响着团队协作的顺畅度和整体工作效率。而汇报工作的关键&#xff0c;就在于给予明确肯定的答复&#xff0c;摒弃“应该”“可能”这类模糊词汇&#xff0c;…...

Java自动拆箱装箱/实例化顺序/缓存使用/原理/实例

在 Java 编程体系中&#xff0c;基本数据类型与包装类紧密关联&#xff0c;它们各自有着独特的特性和应用场景。理解两者之间的关系&#xff0c;特别是涉及到拆箱与装箱、实例化顺序、区域问题、缓存问题以及效率问题。 一、为什么基本类型需要包装类 泛型与集合的需求 Java…...

软件工程---基于构件的软件工程

基于构件的软件工程&#xff08;CBSE&#xff09;是一种软件开发方法&#xff0c;通过重用现有的软件构件来构建系统&#xff0c;从而提高开发效率和软件质量。这种方法强调软件系统的模块化设计和构建复用&#xff0c;使得软件开发过程更加高效和灵活。 企业软件开发&#xf…...

AMD RDNA3 GPU架构解析

本文会通过把AMD的RDNA3架构为例比喻为**“施工公司”**工作模式&#xff0c;深入理解GPU如何高效处理顶点着色、像素计算等任务。 一、施工公司的组织架构 1. 施工公司&#xff08;WGP&#xff09;与施工队&#xff08;CU&#xff09; WGP&#xff08;Work Group Processor&…...

docker关闭mysql端口映射的使用

需求 项目中的数据库为mysql&#xff0c;如果将端口映射到宿主机上&#xff0c;容易被工具扫描出&#xff0c;且随着国产化的进程推进&#xff0c;mysql将不被允许。为了提高安全性与满足项目需求&#xff0c;这里采用隐藏mysql端口方式&#xff0c;不映射宿主机端口&#xff…...

关于对机器中的人工智能进行基准测试

大家读完觉得有帮助记得及时关注和点赞&#xff01;&#xff01;&#xff01; 抽象 最近的基准研究声称&#xff0c;AI 在各种认知任务上的表现已经接近甚至超过人类的“水平”。然而&#xff0c;本立场文件认为&#xff0c;当前的 AI 评估范式不足以评估类似人类的认知能力。我…...

CSS - 妙用Sass

官方文档&#xff1a;https://www.sass.hk/docs/ 1.例1&#xff1a; each $theme in $themeList {$themeKey: map-get($theme, key);media screen and (weex-theme: $themeKey) {.btnText {max-width: 150px;include font(map-get($theme, medFont),map-get($theme, subFontS…...

MS模块创新

1. 动态分支权重融合 创新思路&#xff1a;引入通道注意力机制&#xff0c;自动学习高频/低频分支的融合权重 class DynamicMS(nn.Module):def __init__(self, in_channels1):super().__init__()# 原高频/低频分支保持不变self.high_freq ... # 与原MS模块相同self.low_freq…...

私有化部署DeepSeek并SpringBoot集成使用(附UI界面使用教程-支持语音、图片)

私有化部署DeepSeek并SpringBoot集成使用&#xff08;附UI界面使用教程-支持语音、图片&#xff09; windows部署ollama Ollama 是一个开源框架&#xff0c;专为在本地机器上便捷部署和运行大型语言模型&#xff08;LLM&#xff09;而设计 下载ollama 下载地址&#xff08;…...

MFC中CMutex类和CSingleLock类,配合使用疑惑

在使用CMutex过程中&#xff0c;看到别人使用了CSingleLock类&#xff0c;想着明明CMutex已经可以实现线程同步了&#xff0c;为什么还有使用CSingleLock类呢&#xff1f; 在MFC中&#xff0c;虽然CMutex类本身可以实现线程同步&#xff0c;但通常会与CSingleLock类一起使用&am…...

残差收缩模块

1. 多尺度阈值生成 创新思路&#xff1a;融合不同尺度的统计信息&#xff08;如平均池化最大池化&#xff09;生成更鲁棒的阈值。 class MultiScaleShrinkage(nn.Module):def __init__(self, channel, reduction4):super().__init__()# 多尺度池化分支self.avg_pool nn.Adap…...

HOW - 在Windows浏览器中模拟MacOS的滚动条

目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、Antd table中的滚动条场景三、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果&#xff08;细窄、圆角、隐藏默认轨道&#xff09;。 可以使用以下几种方案&#xff1a; 一…...

Unity 打包后EXE运行出现Field to Load il2cpp的一种情况

Unity版本2021.3.13f1c1 #if DEVELOPMENT_BUILDA1 A1 10600;#else#endif 使用 #if DEVELOPMENT_BUILD然后在下面面板使用Development Build。打包后会运行游戏EXE出现Field to Load il2cpp。 解决办法是换成IF ELSE&#xff0c;自己代码设置个开关、 文心一言&#xff1a; …...

Windows 环境下 Nginx、PHP 与 ThinkPHP 开发环境搭建

Windows 环境下 Nginx、PHP 与 ThinkPHP 开发环境搭建 目录 安装 Nginx 和 PHP配置 Nginx配置 PHP启动服务ThinkPHP 配置常见问题排查 1. 安装 Nginx 和 PHP 安装 Nginx 访问 Nginx 官网 下载 Windows 版本解压到指定目录&#xff0c;如 C:\nginx 安装 PHP 访问 PHP 官网…...

Redis100道高频面试题

一、Redis基础 Redis是什么&#xff1f;主要应用场景有哪些&#xff1f; Redis 是一个开源的、基于内存的数据结构存储系统&#xff0c;支持多种数据结构&#xff08;如字符串、哈希、列表、集合等&#xff09;&#xff0c;可以用作数据库、缓存和消息中间件。 主要应用场景&…...

登录服务器后如何找到对应的drupal所在的文件夹

在服务器上找不到 Drupal 安装目录的原因可能有以下几种&#xff1a; 多站点配置&#xff1a; Drupal 支持多站点设置&#xff0c;即在同一安装中托管多个网站。在这种配置下&#xff0c;每个站点都有自己的设置和文件夹&#xff0c;通常位于 sites 目录下。例如&#xff0c;站…...

win32汇编环境,窗口程序中使控件子类化的示例一

;运行效果 ;win32汇编环境,窗口程序中使编辑框控件子类化的示例一 ;窗口子类化&#xff0c;就是把某种控件&#xff0c;自已再打造一遍&#xff0c;加入自已的功能。比如弄个特殊形状的按钮&#xff0c;或只能输入特殊字符的编辑框 ;当然&#xff0c;一般来说&#xff0c;这都是…...

专业工具,杜绝一切垃圾残留!

在安装大多数软件时均会在系统注册表中创建相应的条目。如果卸载后仍然存在注册表残留&#xff0c;可能会导致再次安装时出现失败&#xff0c;同时也会对系统性能和存储空间产生负面影响。常见的卸载残留包括注册表项、程序文件夹、用户数据文件夹、临时文件以及相关插件等。 …...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...