如何在 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

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

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

相关文章

Zabbix企业级分布式监控系统

第一章&#xff1a;监控概念及Zabbix部署 监控概述 对于监控系统在企业架构中不是新的技术&#xff0c;但却是必不可少的重要组成部分&#xff0c;所谓无监控&#xff0c;不运维&#xff01; 监控系统可以帮助运维、开发、测试等人员及时的发现服务器出现的故障&#xff0c;…

前端安全措施:接口签名、RSA加密、反调试、反反调试、CAPTCHA验证

文章目录 引言I 设置防爬虫功能使用robots.txt文件通过配置HTTP头部中的X-Robots-TagII 禁止打开开发者工具反复清空控制台无限debugger反调试检查是否按下了F12或其他调试快捷键禁用右键监听调试快捷键例子III 屏蔽粘贴/复制/剪切/选中IV 知识扩展: javascript内置命令调试分…

ThinkPHP 8高效构建Web应用-第一个简单的MVC应用示例

【图书介绍】《ThinkPHP 8高效构建Web应用》-CSDN博客 《2025新书 ThinkPHP 8高效构建Web应用 编程与应用开发丛书 夏磊 清华大学出版社教材书籍 9787302678236 ThinkPHP 8高效构建Web应用》【摘要 书评 试读】- 京东图书 使用VS Code开发ThinkPHP项目-CSDN博客 我们先实现一…

Visual Studio 中增加的AI功能

前言&#xff1a; 人工智能的发展&#xff0c;在现在&#xff0c;编程技术的IDE里面也融合了AI的基本操做。本例&#xff0c;以微软的Visual Studio中的人工智能的功能介绍例子。 本例的环境&#xff1a; Visual Studio 17.12 1 AI 智能变量检测&#xff1a; 上图展示了一…

理解生成协同促进?华为诺亚提出ILLUME,15M数据实现多模态理解生成一体化

多模态理解与生成一体化模型&#xff0c;致力于将视觉理解与生成能力融入同一框架&#xff0c;不仅推动了任务协同与泛化能力的突破&#xff0c;更重要的是&#xff0c;它代表着对类人智能&#xff08;AGI&#xff09;的一种深层探索。通过在单一模型中统一理解与生成&#xff…

TTL 传输中过期问题定位

问题&#xff1a; 工作环境中有一个acap的环境&#xff0c;ac的wan口ip是192.168.186.195/24&#xff0c;ac上lan上有vlan205&#xff0c;其ip子接口地址192.168.205.1/24&#xff0c;ac采用非nat模式&#xff0c;而是路由模式&#xff0c;在上级路由器上有192.168.205.0/24指向…

015-spring-动态原理、AOP的xml和注解方式

强制使用cglib动态代理 spring-AOP的使用

Postman测试big-event

报错500。看弹幕&#xff0c;知道可能是yml或sql有问题。 所以检查idea工作台&#xff0c; 直接找UserMapper检查&#xff0c;发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题&#xff0c;而且是有now()的那个sql。 之后通过给的课件&#xff0c;复制课件…

CPT203 Software Engineering 软件工程 Pt.1 概论和软件过程(中英双语)

文章目录 1.Introduction1.1 What software engineering is and why it is important&#xff08;什么是软件工程&#xff0c;为什么它很重要&#xff09;1.1 We can’t run the modern world without software&#xff08;我们的世界离不开软件&#xff09;1.1.1 What is Soft…

基于SpringBoot的题库管理系统的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

Mac 12.1安装tiger-vnc问题-routines:CRYPTO_internal:bad key length

背景&#xff1a;因为某些原因需要从本地mac连接远程linxu桌面查看一些内容&#xff0c;必须使用桌面查看&#xff0c;所以ssh无法满足&#xff0c;所以决定安装vnc客户端。 问题&#xff1a; 在mac上通过 brew install tiger-vnc命令安装, 但是报错如下&#xff1a; > D…

《探秘开源大模型:AI 世界的“超级引擎”》

《探秘开源大模型:AI 世界的“超级引擎”》 一、开源大模型崛起之路二、开源大模型发展历程回顾(一)早期奠基:理论突破与初步实践(二)快速发展:百花齐放的模型格局(三)当下态势:走向成熟与多元融合三、开源大模型核心技术剖析(一)Transformer 架构:基石之稳(二)…

SWM221系列芯片之电机应用及控制

经过对SWM221系列的强大性能及外设资源&#xff0c;TFTLCD彩屏显示及控制进行了整体介绍后&#xff0c;新迎来我们的电控篇---SWM221系列芯片之电机应用及控制。在微控制器市场面临性能、集成度与成本挑战的当下&#xff0c;SWM221系列芯片以其卓越性能与创新设计&#xff0c;受…

2024165读书笔记|《飞花令·合》——人生飘忽百年内,且须酣畅万古情

2024165读书笔记|《飞花令合》—— 人生飘忽百年内&#xff0c;且须酣畅万古情 屈原班婕妤曹植刘绘卢思道卢照邻苏味道刘希夷李白高适杜甫司空曙白居易温庭筠韦庄窦叔向张泌林逋柳永晏殊欧阳修李觏舒亶秦观陈瓘李清照陆游辛弃疾姜夔蒋捷吴伟业纳兰性德张惠言邓廷桢 《飞花令合》…

露营小程序搭建有哪些步骤?小程序里面可以找个露营搭子

露营不仅仅是走进大自然的旅程&#xff0c;它也成为了一种社交和体验式的活动。随着小程序的普及&#xff0c;露营活动也越来越多地开始在线上开展。通过搭建一个露营小程序&#xff0c;商家不仅可以为用户提供更多的露营选择&#xff0c;还可以帮助他们找到合适的露营搭子。那…

Vue 针对浏览器参数过长实现浏览器参数加密解密

1、首先安装crypto-js npm install crypto-js 1、在router/index.js中添加如下代码 在utils工具类添加如下 encryption.js源码 import CryptoJS from crypto-js import CryptoJSCore from crypto-js/core import AES from crypto-js/aes import ZeroPadding from crypto-js/…

Unity-Mirror网络框架-从入门到精通之Basic示例

文章目录 前言Basic示例场景元素预制体元素代码逻辑BasicNetManagerPlayer逻辑SyncVars属性Server逻辑Client逻辑 PlayerUI逻辑 最后 前言 在现代游戏开发中&#xff0c;网络功能日益成为提升游戏体验的关键组成部分。Mirror是一个用于Unity的开源网络框架&#xff0c;专为多人…

AIA - APLIC之二

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 对于APLIC实现的每一个中断域,都存在一个独享的内存映射的控制区域,用来处理该中断域的中断。 该控制区域大小是由4KB的倍数,并与4KB地址边界对齐,最小的有效控制区域是16KB。 接下来,本文将详细讲解,AP…

设计模式之访问者模式:一楼千面 各有玄机

~犬&#x1f4f0;余~ “我欲贱而贵&#xff0c;愚而智&#xff0c;贫而富&#xff0c;可乎&#xff1f; 曰&#xff1a;其唯学乎” 一、访问者模式概述 \quad 江湖中有一个传说&#xff1a;在遥远的东方&#xff0c;有一座神秘的玉楼。每当武林中人来访&#xff0c;楼中的各个房…

SAP月结、年结前重点检查事项(后勤与财务模块)

文章目录 一、PP生产模块相关的事务检查二、SD销售模块相关的事务检查:三、MM物料管理模块相关的事务检查四、FICO财务模块相关的事务检查五、年结前若干注意事项【SAP系统PP模块研究】 #SAP #生产订单 #月结 #年结 一、PP生产模块相关的事务检查 1、月末盘点后,生产用料的…