centos8安装rabbitmq

一 RabbitMQ下载
RabbitMQ 官网最新版下载:

https://www.rabbitmq.com/tutorials

RabbitMQ v4.1.0-beta.2版本下载:

https://github.com/rabbitmq/rabbitmq-server/releases/download/v4.1.0-beta.2/rabbitmq-server-4.1.0.beta.2-1.el8.noarch.rpm

RabbitMQ依赖Erlang 26.2.5.12下载:

https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5.12/erlang-26.2.5.12-1.el8.x86_64.rpm

 

erlang和rabbitmq的版本的兼容: https://www.rabbitmq.com/docs/which-erlang

 

 

 

 

二 RabbitMQ安装

 1 安装erlang环境

  安装RabbitMQ前要先安装erlang环境,因为RabbitMQ是用erlang开发的

  执行安装指令如下:

rpm -ivh erlang-26.2.5.12-1.el8.x86_64.rpm
或
dnf install -y erlang-26.2.5.12-1.el8.x86_64.rpm

验证 erlang 安装是否成功,执行erl可以查看版本,说明安装成功

erl -version

2 安装RabbitMQ

  执行安装RabbitMQ指令如下:

rpm -ivh rabbitmq-server-4.1.0.beta.2-1.el8.noarch.rpm
或
dnf install -y rabbitmq-server-4.1.0.beta.2-1.el8.noarch.rpm

 

安装结束后,消息队列数据保存在哪?日记在哪?想了解更多的信息?

rabbitmq-diagnostics status

3 RabbitMQ 启动与关闭

#启动
systemctl start rabbitmq-server 
#停止关闭
systemctl stop rabbitmq-server
#重启
systemctl restart rabbitmq-server
#开机启动
systemctl enable rabbitmq-server
#查看状态
systemctl status rabbitmq-server

4 开启RabbitMQ的Web管理界面

rabbitmq-plugins enable rabbitmq_management

 

#新增人员
rabbitmqctl add_user admin admin
#设置权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
#设置为管理员
rabbitmqctl set_user_tags admin administrator

* 表示授予该用户对该虚拟主机上所有队列和交换机的 configurewrite 和 read 权限。

  • 第一个 ".*" 表示用户可以配置任意队列和交换机。
  • 第二个 ".*" 表示用户可以向任意队列和交换机发送消息。
  • 第三个 ".*" 表示用户可以从任意队列中消费消息。

 

5 虚拟主机

虚拟主机(vhost)是 RabbitMQ 中的一种逻辑隔离机制,它相当于一个独立的命名空间。每个虚拟主机内部可以拥有自己独立的队列、交换机、绑定等资源,彼此之间相互隔离,不能共享资源。

命名空间:每个虚拟主机都有自己的队列、交换机、绑定等资源。
资源隔离:不同虚拟主机之间的资源(如队列和交换机)完全隔离,防止不同应用间的资源冲突。
用户权限:不同的用户可以被授予不同虚拟主机的访问权限,确保用户只能访问指定的虚拟主机中的资源。
虚拟主机提供了一种隔离和权限管理的方式,适用于以下场景:

多租户架构:在 SaaS(软件即服务)或多租户应用中,你可以为不同的租户创建不同的虚拟主机,以确保数据隔离。
开发与生产环境隔离:你可以为开发环境和生产环境创建不同的虚拟主机,避免资源冲突和干扰。
权限管理:不同的用户或应用可以通过虚拟主机进行权限分离,确保只有特定用户才能访问某些资源。
默认虚拟主机

RabbitMQ 默认创建一个虚拟主机 /,这是一个特殊的虚拟主机,通常用于测试或默认情况下的资源管理。生产环境中,建议创建和使用新的虚拟主机,以更好地管理资源和权限。

虚拟主机操作也非常简单,如下图:

 在用户管理界面选择用户绑定指定的虚拟主机,非常方便,如下图:

 

 php 使用 rabbitmq

1. 安装php-amqplib

composer require php-amqplib/php-amqplib

2. 发送持久化消息

在发送消息时,你需要设置delivery_mode为2,这表示消息将会被持久化。同时,确保队列也是持久的。

下面是一个示例代码,展示如何发送一个持久化的消息:

<?php
require_once __DIR__ . '/vendor/autoload.php';
 
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
 
// 连接到RabbitMQ服务器
$connection = new AMQPStreamConnection('localhost', 5672, 'your_user', 'your_password');
$channel = $connection->channel();
 
// 确保队列是持久的
$channel->queue_declare('hello', false, true, false, false);
 
// 创建一个新的消息实例,并设置持久化模式
$msg = new AMQPMessage('Hello World!', ['delivery_mode' => AMQPMessage::DELIVERY_MODE_PERSISTENT]);
 
// 发送消息到队列
$channel->basic_publish($msg, '', 'hello');
 
echo " [x] Sent 'Hello World!'\n";
 
// 关闭连接
$channel->close();
$connection->close();

3. 接收持久化消息

接收端不需要特别设置来接收持久化消息,因为RabbitMQ保证一旦消息被确认(acknowledged),就会被删除。但是,你应该确保消费者正确处理了ack(确认)机制,以避免重复消费或丢失消息。

下面是一个简单的消费者示例:

 

<?php
require_once __DIR__ . '/vendor/autoload.php';
 
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
 
$connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');
$channel = $connection->channel();

// 声明持久化队列(需与生产者保持一致)
$channel->queue_declare('hello', false, true, false, false);

$callback = function ($msg) {
    echo ' [x] Received ', $msg->body, "\n";
    // 业务处理逻辑...
    sleep(substr_count($msg->body, '.')); // 模拟任务耗时
    echo " [x] Done\n";
    $msg->ack(); // 手动确认消息
};

// 设置QoS预取计数(限制未确认消息数)
$channel->basic_qos(null, 1, null);

// 开启手动确认模式
$channel->basic_consume(
    'hello', 
    '', 
    false, 
    false, 
    false, 
    false, 
    $callback
);

while ($channel->is_consuming()) {
    $channel->wait();
}

 

 

 

转 : https://blog.csdn.net/qyhua/article/details/141424830

posted @ 2025-05-09 14:19  与f  阅读(254)  评论(0)    收藏  举报