商城类网站备案,互联网医院建设方案,中国小型加工机械网,天津招投标天津建设工程信息网简介
消息代理是中间应用程序#xff0c;在不同服务之间提供可靠和稳定的通信方面发挥着关键作用。它们可以将传入的请求存储在队列中#xff0c;并逐个提供给接收服务。通过以这种方式解耦服务#xff0c;你可以使其更具可扩展性和性能。
RabbitMQ 是一种流行的开源消息代…简介
消息代理是中间应用程序在不同服务之间提供可靠和稳定的通信方面发挥着关键作用。它们可以将传入的请求存储在队列中并逐个提供给接收服务。通过以这种方式解耦服务你可以使其更具可扩展性和性能。
RabbitMQ 是一种流行的开源消息代理它根据预定义的规则存储和传递两个或多个服务之间的异步消息。它是一种中间软件可确保你的系统更可靠、更具可扩展性且始终可用。例如RabbitMQ 可用于通过将繁重的任务委派给当时空闲的其他服务来减少系统负载。
本教程的目标是手把手教你如何在 Linux 服务器上安装 RabbitMQ以便开始使用这个出色的软件。
准备工作
服务器准备
必要前提
一个充满求知欲的大脑。一台 Linux 服务器推荐腾讯云、阿里云或雨云等。
我将以 雨云 为例带大家创建一台自己的云服务器以便学习本篇文章的内容。
注册链接 https://rainyun.ivwv.site
创建雨云服务器 以下步骤仅供参考请根据实际需求选择配置。 点击 云产品 → 云服务器 → 立即购买。选择距离你较近的区域以保证低延迟。 按照自己需求选择配置选择Ubuntu 22.04 版本按照自己需求是否预装Docker。最后按照提示进行购买。购买后等待机器部署完毕点击刚刚创建好的服务器进入管理面板找到远程连接相关信息。 我们使用 PowerShell 进行 SSH 远程连接到服务器WinR 打开运行窗口输入 powershell 后点击确定。 输入 ssh root你的服务器IP 例如 ssh root154.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?opgetsearch0xf77f1eda57ebb1cc | 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.py 和 consumer.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(usernamethebigrabbit, passwordMyS3cur3Passwor_d, erase_on_connectTrue)
parameters pika.ConnectionParameters(host5.199.168.22, port5672, virtual_hostcherry_broker, credentialscredentials)# 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(queuehello)
# 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_keyhello, bodyHello 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(host5.199.168.22, port5672, virtual_hostcherry_broker, credentialscredentials)connection pika.BlockingConnection(parameters)channel connection.channel()channel.queue_declare(queuehello)# 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(queuehello, on_message_callbackcallback, auto_ackTrue)print( [*] Waiting for messages. To exit press CTRLC)# 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