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

如何在 Ubuntu 22.04 上安装并开始使用 RabbitMQ

简介

消息代理是中间应用程序,在不同服务之间提供可靠和稳定的通信方面发挥着关键作用。它们可以将传入的请求存储在队列中,并逐个提供给接收服务。通过以这种方式解耦服务,你可以使其更具可扩展性和性能。

RabbitMQ 是一种流行的开源消息代理,它根据预定义的规则存储和传递两个或多个服务之间的异步消息。它是一种中间软件,可确保你的系统更可靠、更具可扩展性且始终可用。例如,RabbitMQ 可用于通过将繁重的任务委派给当时空闲的其他服务来减少系统负载。

本教程的目标是手把手教你如何在 Linux 服务器上安装 RabbitMQ,以便开始使用这个出色的软件。

准备工作

服务器准备

必要前提:

  • 一个充满求知欲的大脑。
  • 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。

我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。

注册链接: https://rainyun.ivwv.site

创建雨云服务器

以下步骤仅供参考,请根据实际需求选择配置。

  • 点击 云产品云服务器立即购买
  • 选择距离你较近的区域,以保证低延迟。

  • 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
  • 最后按照提示进行购买。
  • 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。

  • 我们使用 PowerShell 进行 SSH 远程连接到服务器,Win+R 打开运行窗口,输入 powershell 后点击确定。

  • 输入 ssh root@你的服务器IP 例如 ssh root@154.9.227.239 回车后,首次需要输入 yes,再次回车后即可登录服务器。

  • 到此为止,我们的云服务器就远程连接上了。

安装和配置步骤

第一步:安装 RabbitMQ 服务器

首先,让我们安装先决条件:

apt-get install curl gnupg apt-transport-https -y

我们现在准备好分别为 RabbiMQ 主存储库、ErLang 和 RabbitMQ PackageCloud 存储库添加存储库签名密钥:

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null
curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/null

/etc/apt/sources.list.d/rabbitmq.list 创建一个新文件,并为 ErLang 和 RabbitMQ 分别添加以下适用于 Ubuntu 22.04 jammy 版本的存储库:

deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu jammy main
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ jammy main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ jammy main

保存该文件,你就可以更新存储库列表了:

apt-get update -y

更新存储库列表后,继续安装所需的 ErLang 软件包:

apt-get install -y erlang-base \\erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\erlang-runtime-tools erlang-snmp erlang-ssl \\erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

最后,我们可以安装 RabbitMQ 服务器及其依赖项:

apt-get install rabbitmq-server -y --fix-missing

如果一切顺利,你应该看到一个正在运行的 rabbitmq-server 进程:

systemctl status rabbitmq-server

恭喜,你现在已成功安装 RabbitMQ!现在是学习如何使用它的时候了。

第二步:启用 RabbitMQ 管理控制台

RabbitMQ 有一个管理控制台插件,允许你通过基于 Web 的界面执行各种管理和监控任务。你可以管理交换机、队列、绑定、用户和其他 RabbitMQ 对象,以及监控内存使用率、消息速率、连接和其他进程等内容。

要检查所有可用的 RabbitMQ 插件的列表,请运行以下命令:

rabbitmq-plugins list

如你所见,所有插件当前均已禁用。你可以使用以下命令启用 RabbitMQ 管理插件:

rabbitmq-plugins enable rabbitmq_management

你现在可以连接到 RabbitMQ Web 界面。要获得访问权限,请打开你的 Web 浏览器并键入 URL http://你的服务器IP:15672

默认用户名和密码为 guest,但是,你只能从 localhost 使用用户 guest 连接到你的 RabbitMQ 服务器。任何其他用户都不会受到这种限制。

如果你不知道你的 IP 地址,请键入以下命令来找出它:

hostame -I

第三步:设置 RabbitMQ 管理用户

建议在设置 RabbitMQ 服务器时创建一个新用户并为其分配管理权限。你可以使用 rabbitmqctl add_user 命令添加新用户。选择一个唯一的用户名并设置一个安全的密码以继续:

rabbitmqctl add_user thebigrabbit MyS3cur3Passwor_d

接下来,使用以下命令为创建的用户设置管理员标记:

rabbitmqctl set_user_tags thebigrabbit administrator

出于安全原因,还建议删除默认用户 guest

rabbitmqctl delete_user guest

请随意检查用户列表,以确保你的配置正确:

rabbitmqctl list_users

你现在可以看到只有一个用户 thebigrabbit 带有标记 administrator,并且没有可用的默认用户 guest。目前为止一切顺利。

第四步:创建 RabbitMQ 虚拟主机

RabbitMQ 在虚拟主机级别管理用户权限。RabbitMQ 中的虚拟主机提供不同资源的逻辑分组和分隔。此类资源可能包括连接、交换机、队列、绑定、用户权限和一些其他 RabbitMQ 对象。

要添加新的虚拟主机,请继续执行以下命令:

rabbitmqctl add_vhost cherry_broker

你可以将各种配置设置应用于虚拟主机,例如设置最大并发客户端连接数、配置最大队列数等。现在让我们列出服务器上所有可用的虚拟主机:

rabbitmqctl list_vhosts

如你所见,你的服务器上当前有两个可用的虚拟主机 - /cherry_broker。你可以使用以下命令删除默认虚拟主机:

rabbitmqctl delete_vhost /

第五步:为虚拟主机分配用户权限

接下来,你需要在新创建的虚拟主机上为你的管理用户设置特定的用户权限。用于设置用户权限的基本命令模式如下:

sudo rabbitmqctl set_permissions -p <virtual_host> <user_name> <permissions>

要在虚拟主机 cherry_broker 上为用户 thebigrabbit 设置完全权限,请运行以下命令:

sudo rabbitmqctl set_permissions -p cherry_broker thebigrabbit ".*" ".*" ".*"

更具体地说:

  • p 用于定义虚拟主机。
  • 第一个权限参数“.*”授予对所有虚拟主机实体的配置权限。它允许你声明交换机、队列等。
  • 第二个权限参数“.*”授予对所有虚拟主机实体的写入权限。它允许你创建绑定、发布消息等。
  • 第三个权限参数“.*”授予读取权限。它允许你读取队列、使用消息等。

你可以使用以下命令查看你刚刚在虚拟主机上设置的权限:

sudo rabbitmqctl list_permissions -p cherry_broker

第六步:通过 Web 管理控制台设置 RabbitMQ

你现在可以使用你新创建的用户名和密码连接到 Web 管理控制台:

成功验证后,你应该看到类似的 RabbitMQ 仪表板:

第七步:在 Python 中发送和使用 RabbitMQ 消息

即使有许多适用于 RabbitMQ 的 SDK,我们仍将在此教程中使用 Python。首先,我们需要安装 RabbitMQ 开发团队推荐的 pika Python 客户端。使用 pip install 继续安装:

pip install pika --upgrade

我们现在准备好开始编写我们的 Python 开发脚本。我们将在远程 Linux 主机上运行这些脚本,该主机将连接到标准端口 5672 上的 RabbitMQ 服务器以发送和使用消息。我们将使用 producer.pyconsumer.py 脚本来说明消息代理的工作原理。

现在让我们定义我们的 producer.py 脚本,其工作是生成消息并将它们推送到 RabbitMQ:

#!/usr/bin/env python
import pika# If you want to have a more secure SSL authentication, use ExternalCredentials object instead
credentials = pika.PlainCredentials(username='thebigrabbit', password='MyS3cur3Passwor_d', erase_on_connect=True)
parameters = pika.ConnectionParameters(host='5.199.168.22', port=5672, virtual_host='cherry_broker', credentials=credentials)# We are using BlockingConnection adapter to start a session. It uses a procedural approach to using Pika and has most of the asynchronous expectations removed
connection = pika.BlockingConnection(parameters)
# A channel provides a wrapper for interacting with RabbitMQ
channel = connection.channel()# Check for a queue and create it, if necessary
channel.queue_declare(queue='hello')
# For the sake of simplicity, we are not declaring an exchange, so the subsequent publish call will be sent to a Default exchange that is predeclared by the broker
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")# Safely disconnect from RabbitMQ
connection.close()

保存它并创建一个 consumer.py 脚本,其工作是从 RabbitMQ 使用消息:

#!/usr/bin/env python
import pika, sys, os# Here we define the main script that will be executed forever until a keyboard interrupt exception is received
def main():credentials = pika.PlainCredentials('thebigrabbit', 'MyS3cur3Passwor_d')parameters = pika.ConnectionParameters(host='5.199.168.22', port=5672, virtual_host='cherry_broker', credentials=credentials)connection = pika.BlockingConnection(parameters)channel = connection.channel()channel.queue_declare(queue='hello')# Since RabbitMQ works asynchronously, every time you receive a message, a callback function is called. We will simply print the message body to the terminaldef callback(ch, method, properties, body):print(" [x] Received %r" % body)# Consume a message from a queue. The auto_ack option simplifies our example, as we do not need to send back an acknowledgement query to RabbitMQ which we would normally want in productionchannel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)print(' [*] Waiting for messages. To exit press CTRL+C')# Start listening for messages to consumechannel.start_consuming()if __name__ == '__main__':try:main()except KeyboardInterrupt:print("Interrupted")try:sys.exit(0)except SystemExit:os._exit(0)

我们现在可以通过运行我们的 producer 脚本来发送我们的第一条消息:

python3 producer.py

你可以双击 Web 管理控制台以查看带有单条消息的队列 hello,该消息已准备好被使用:

现在让我们运行 consumer 脚本以接收此消息:

如你所见,在接收到 KeyboardInterrupt 信号 (CTRL + C) 之前,已成功使用了消息 Hello World!

如果你检查了 Web 管理控制台,你将看到一个空的 hello 队列:

结论

在本指南中,你已经了解了很多关于 RabbitMQ、它的优点以及可能的用例。你现在可以继续进一步开发,以在生产环境中实施你所需的消息代理用例。请查看官方 RabbitMQ 和 Pika 文档,以获取沿途的任何其他信息。

雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site

相关文章:

如何在 Ubuntu 22.04 上安装并开始使用 RabbitMQ

简介 消息代理是中间应用程序&#xff0c;在不同服务之间提供可靠和稳定的通信方面发挥着关键作用。它们可以将传入的请求存储在队列中&#xff0c;并逐个提供给接收服务。通过以这种方式解耦服务&#xff0c;你可以使其更具可扩展性和性能。 RabbitMQ 是一种流行的开源消息代…...

【OpenGL ES】GLSL基础语法

1 前言 本文将介绍 GLSL 中数据类型、数组、结构体、宏、运算符、向量运算、矩阵运算、函数、流程控制、精度限定符、变量限定符&#xff08;in、out、inout&#xff09;、函数参数限定符等内容&#xff0c;另外提供了一个 include 工具&#xff0c;方便多文件管理 glsl 代码&a…...

如何使用交叉编译器调试C语言程序在安卓设备中运行

一、前言 随着移动设备的普及与技术的飞速发展&#xff0c;越来越多的开发者面临着在Android设备上运行和调试C语言等程序的需求。然而&#xff0c;在软件开发的世界里&#xff0c;不同硬件架构对程序运行的要求千差万别&#xff0c;这无疑增加了开发的复杂性。特别是在移动计…...

Java全栈项目 - 智能考勤管理系统

项目介绍 智能考勤管理系统是一个基于 Java 全栈技术开发的现代化企业考勤解决方案。该系统采用前后端分离架构&#xff0c;实现了员工考勤、请假管理、统计分析等核心功能&#xff0c;旨在帮助企业提高人力资源管理效率。 技术栈 后端技术 Spring Boot 2.6.xSpring Securi…...

Linux Shell : Process Substitution

注&#xff1a;本文为 “Process Substitution” 相关文章合辑。 英文引文机翻&#xff0c;未校。 Process Substitution. 进程替换允许使用文件名引用进程的输入或输出。它采取以下形式 <(list)or >(list)进程 list 异步运行&#xff0c;其输入或输出显示为文件名。…...

JOGL 从入门到精通:开启 Java 3D 图形编程之旅

一、引言 Java 作为一门广泛应用的编程语言&#xff0c;在图形编程领域也有着强大的工具和库。JOGL&#xff08;Java OpenGL&#xff09;便是其中之一&#xff0c;它为 Java 开发者提供了访问 OpenGL&#xff08;Open Graphics Library&#xff09;功能的接口&#xff0c;使得…...

汽车网络安全基线安全研究报告

一、引言 随着汽车行业朝着智能网联方向飞速发展&#xff0c;汽车网络安全已成为保障用户安全和行业健康发展的关键要素。本报告将深入探讨汽车网络安全相关内容&#xff0c;以及国际、国内重要的汽车网络安全标准基线和相应防护措施等内容。 二、汽车网络安全的重要性 &…...

Eclipse 修改项目栏字体大小

1、菜单栏选择window->preference&#xff0c;然后选择General->Appearance->Colors and Fonts&#xff0c;在搜索栏输入"tree"&#xff0c;点击"Edit"修改字体。 2、修改字体&#xff0c;选择"四号字体"&#xff0c;点击"确定&qu…...

【PCIe 总线及设备入门学习专栏 5.1 -- PCIe 引脚 PRSNT 与热插拔】

文章目录 OverviewPRSNT 与热插拔PRSNT 硬件设计 Overview Spec 定义的热插拔是把一个PCIe卡&#xff08;设备&#xff09;从一个正在运行的背板或者系统中插入/或者移除。这个过程需要不影响系统的其他功能。插入的新的设备可以正确工作。 显然&#xff0c;这里面需要考虑的问…...

【YOLO】YOLOv5原理

概述 YOLOv5的主要架构 Backbone&#xff08;主干网络&#xff09;&#xff1a;负责提取输入图像的多层次特征 Neck&#xff08;颈部网络&#xff09;&#xff1a;进行特征融合和多尺度特征处理&#xff0c;通常包含FPN&#xff08;特征金字塔网络&#xff09;和PAN&#xff0…...

uniapp中wx.getFuzzyLocation报错如何解决

一、用wx.getLocation接口审核不通过 用uniapp开发小程序时难免需要获取当前地理位置。 代码如下&#xff1a; uni.getLocation({type: wgs84,success: function (res) {console.log(当前位置的经度&#xff1a; res.longitude);console.log(当前位置的纬度&#xff1a; r…...

opencv图像直方图

【欢迎关注编码小哥&#xff0c;学习更多实用的编程方法和技巧】 1、基本直方图计算 // 灰度图直方图 cv::Mat calculateGrayscaleHistogram(const cv::Mat& image) {cv::Mat histogram;int histSize 256; // 灰度级别float range[] {0, 256};const float* histRange …...

OpenCV计算机视觉 03 椒盐噪声的添加与常见的平滑处理方式(均值、方框、高斯、中值)

上一篇文章&#xff1a;OpenCV计算机视觉 02 图片修改 图像运算 边缘填充 阈值处理 目录 添加椒盐噪声 图像平滑常见处理方式 均值滤波 (blur) 方框滤波 (boxFilter) ​高斯滤波 (GaussianBlur) 中值滤波 (medianBlur) 添加椒盐噪声 def add_peppersalt_noise(image, n…...

【嵌入式C语言】内存分布

内存分布 内存分布图内存的属性&#xff1a;只读空间只读空间的特点编程注意事项 栈空间栈的工作原理栈的特点栈溢出与堆的区别 堆空间堆的特点内存分配函数内存泄漏总结 内存分布图 内存的属性&#xff1a; 在C语言中&#xff0c;内存的属性主要取决于它是如何分配的以及它在…...

【brainpan靶场渗透】

文章目录 一、基础信息 二、信息收集 三、反弹shell 四、提权 一、基础信息 Kali IP&#xff1a;192.168.20.146 靶机 IP&#xff1a;192.168.20.155 二、信息收集 似乎开放了9999&#xff0c;10000端口&#xff0c;访问页面没有太多内容&#xff0c;扫描一下目录 dirs…...

Java实现观察者模式

一、前言 观察者模式&#xff0c;又称为发布订阅模式&#xff0c;是一种行为设置模式&#xff0c;允许对象之间建立一对多的依赖关系&#xff0c;这样当一个对象状态改变时&#xff0c;它的所有依赖者&#xff08;观察者&#xff09;都会收到通知并自动更新。 二、具体实现 …...

通过百度api处理交通数据

通过百度api处理交通数据 1、读取excel获取道路数据 //道路名称Data EqualsAndHashCode public class RoadName {ExcelProperty("Name")private String name; }/*** 获取excel中的道路名称*/private static List<String> getRoadName() {// 定义文件路径&…...

探索CSDN博客数据:使用Python爬虫技术

探索CSDN博客数据&#xff1a;使用Python爬虫技术 在数字化的浪潮中&#xff0c;数据的获取与分析变得日益关键。CSDN作为中国领先的IT社区和服务平台&#xff0c;汇聚了海量的技术博客与文章&#xff0c;成为一座蕴藏丰富的数据宝库。本文将引领您穿梭于Python的requests和py…...

b站ip属地评论和主页不一样怎么回事

在浏览B站时&#xff0c;细心的用户可能会发现一个有趣的现象&#xff1a;某些用户的评论IP属地与主页显示的IP属地并不一致。这种差异引发了用户的好奇和猜测&#xff0c;究竟是什么原因导致了这种情况的发生呢&#xff1f;本文将对此进行深入解析&#xff0c;帮助大家揭开这一…...

如何查看服务器内存占用情况?

如何查看服务器的内存占用情况&#xff1f;你知道内存使用情况对服务器性能的重要性吗&#xff1f;内存是服务器运行的核心资源之一&#xff0c;了解内存的占用情况可以帮助你优化系统性能。 要查看服务器的内存占用情况&#xff0c;首先需要确定你使用的是哪种操作系统。不同…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

第7篇:中间件全链路监控与 SQL 性能分析实践

7.1 章节导读 在构建数据库中间件的过程中&#xff0c;可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中&#xff0c;必须做到&#xff1a; &#x1f50d; 追踪每一条 SQL 的生命周期&#xff08;从入口到数据库执行&#xff09;&#…...