当前位置: 首页 > 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;首先需要确定你使用的是哪种操作系统。不同…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

让AI看见世界:MCP协议与服务器的工作原理

让AI看见世界&#xff1a;MCP协议与服务器的工作原理 MCP&#xff08;Model Context Protocol&#xff09;是一种创新的通信协议&#xff0c;旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天&#xff0c;MCP正成为连接AI与现实世界的重要桥梁。…...

HDFS分布式存储 zookeeper

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

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...