1.必需掌握的指令
添加用户:
rabbitmqctl add_user rainbird password
添加权限:
rabbitmqctl set_permissions -p "/" rainbird ".*" ".*" ".*"
删除测试用户:
rabbitmqctl delete_user guest
所有指令列表(很简单的英文):
add_user <UserName> <Password>
delete_user <UserName>
change_password <UserName> <NewPassword>
list_users
add_vhost <VHostPath>
delete_vhost <VHostPath>
list_vhosts
set_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp>
clear_permissions [-p <VHostPath>] <UserName>
list_permissions [-p <VHostPath>]
list_user_permissions <UserName>
list_queues [-p <VHostPath>] [<QueueInfoItem> ...]
list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...]
list_bindings [-p <VHostPath>]
list_connections [<ConnectionInfoItem> ...]
2.vhost / 不能删除
删除/以后,新建立的vhost不能正常使用(即便不删除/,新建立的vhost也是不能正常使用).不知道为什么,有待研究.
3.关于持久化
示例里没有一点儿和持久化相关的东东,而这却是笔者最关心的,想想作为消息服务器如果不能保证消息一定被接收到,算什么事儿啊?比着网上狂转的python版本从php-amqp的库里一点一点儿翻,找到了如下持久化的设置:
接收端声明队列和交换机自动建立:
$ch->queue_declare($_QUEUE,false,true,false,false);
第三个参数设置true保证服务器重启后,自动建立队列
第五个参数设置成false防止接收端没连接的时候丢失消息
$ch->exchange_declare($EXCHANGE, 'direct', false, true, false);
第四个参数设置true保证重启后,自动建立交换机
第五个参数设置false防止接收端断开后,交换机被删除
发布端声明消息持久:
$message = new AMQPMessage(serialize($object), array('content_type' => 'text/plain', 'delivery_mode' => 2));
同时满足了上面三个条件,就可以保证未接收的消息在服务器意外重启以后依然存在了.
4.持久化的后遗症
比如说你初始化了一个队列msgs.你会发现它真的持久了!每次服务器端重启后,通过list_queues命令查看的时候都存在.但是时间久了,这个msgs我们并不需要了,怎么办呢?笔者发现,想清除这个队列只能删除它所在的vhost,然后再重建vhost,再设置vhost的权限.
rabbitmqctl delete_vhost /
rabbitmqctl add_vhost /
rabbitmqctl set_permissions -p / rainbird '.*' '.*' '.*'
要注意,如果这个操作过程中有接收端处于连接状态它们不会自动断开,但也不会再收到消息,需要手动重新连接一下.
5.关于修改监听ip和监听端口
出于一些需要,比如我们有多个ip,我们希望rabbitmq仅运行在指定的ip上.或者考虑到安全问题,我们希望修改一下rabbitmq的监听端口.默认安装完成以后,在/etc下面会有一个rabbitmq的空目录,这时候我们需要手工创建rabbitmq.conf,并写入相关内容.
vi /etc/rabbitmq/rabbitmq.conf
RABBITMQ_NODE_IP_ADDRESS=0.0.0.0
RABBITMQ_NODE_PORT=2222
保存以后重启服务就生效了.
这个东东网上又没介绍,翻了半天+无限尝试才搞出来.
6.关于运行接收端cpu100%问题
第一眼看到接收端会运行一个while等待消息的时候,笔者就知道这个进程肯定cpu占用会100%.在代码里几处while尝试添加usleep无效后,笔者最后还是在官方的问题列表里找到了答案:
vi +286 amqp_wire.inc
293 while ($read < $n && (false !== ($buf = fread($this->sock, $n - $read))))
294 {
295 usleep(50000);
296 $read += strlen($buf);
297 $res .= $buf;
298 }
笔者的出发点是对的,只是没找对while.可能有人会奇怪为什么要用usleep(50000)呢?实际上笔者有遇到运行php起来的daemon导致cpu100%的情况.当时笔者加的是usleep(500000)也就是半秒钟.这样就可以使进程看上去cpu占用为0.没想到再降一个数量级也是可以正常的,这次算赚到了.
7.学到了error_log函数
以前有见过这个函数,以为是向系统日志里写log的时候才用得到呢,没想到还可以像下面这样用:
function debug_msg($s)
{
//error_log($s);
}
在不同的地方写上debug_msg,最后不用的时候时候,直接注释掉error_log,不错的小技巧!
暂时就摸索出来这么多东西了,准备拿几个不重要的任务跑跑稳定性试试.
相关推荐
### RabbitMQ常用命令详解 #### 一、服务启动与关闭 **启动命令:** - `rabbitmq-server-detached`:启动RabbitMQ服务,并将其置于后台运行。 **关闭命令:** - `rabbitmqctl stop`:停止正在运行的RabbitMQ服务...
### RabbitMQ操作手册知识点解析 #### 一、RabbitMQ简介及重要性 RabbitMQ是一种消息中间件,主要用于在分布式系统中实现消息传递。它支持多种消息协议,并且能够处理大量的并发用户同时发送和接收消息。由于其...
本教程将通过一个PHP操作RabbitMQ的实例——"RabbitMQ操作demo",来讲解如何在PHP环境中使用RabbitMQ。 首先,安装RabbitMQ是基础步骤。你需要在服务器上下载并安装RabbitMQ,这通常涉及访问其官方网站下载适合你...
执行相关命令 1.添加用户密码 rabbitmqctl add_user wenli wenli 2.设置wenli为管理员rabbitmqctl set_user_tags wenli administrator 3.启动RabbitMQ的web管理rabbitmq-plugins enable rabbitm
麒麟操作系统,作为中国自主研发的Linux发行版,以其稳定性和安全性在服务器领域得到了广泛应用。而RabbitMQ是一款开源的消息队列系统,基于AMQP(Advanced Message Queuing Protocol)协议,广泛用于分布式系统的...
安装RabbitMQ的命令如下: ```bash sudo yum install -y rabbitmq-server-3.11.1-1.el8.noarch.rpm ``` 安装完成后,RabbitMQ服务通常会自动启动。你可以通过以下命令检查其状态: ```bash sudo systemctl status...
- 队列和交换机操作:声明、删除队列和交换机,设置绑定,以实现消息路由。 - 消息发布和消费:发布消息到队列,订阅队列以接收消息。 - AMQP命令:支持完整的AMQP命令集,包括事务、确认模式等。 在使用`rabbitmq-...
4. 安装完成后,可以在命令行中通过`rabbitmq-plugins enable rabbitmq_management`命令启用管理插件,这样可以通过Web界面管理RabbitMQ。 5. 使用浏览器访问`http://localhost:15672`,使用默认凭据(guest/guest)...
消息通常是JSON格式,可以通过解码后进行操作。 8. **异常处理与确认**:为了保证消息的可靠性,可以启用消费者确认机制。当消息被正确处理后,消费者需要发送一个确认信号给RabbitMQ,否则消息将被重新投递。同时...
RabbitMQ适用于多种操作系统,文档中提及了基于华为云使用CentOS 7.6(64位)系统部署RabbitMQ 3.8.2版本的实例。该服务软件的安装和配置被记录在官方手册中,为用户提供了一个较为完整的指南。 安装RabbitMQ通常...
4. **配置环境变量**:确保PATH环境变量包含RabbitMQ的sbin目录,这样就可以在命令行中直接运行RabbitMQ命令。 5. **设置默认用户和虚拟主机**:RabbitMQ默认不提供用户认证,为了安全起见,需要通过命令行工具...
在命令行中,执行类似 `./rabbitmq_exporter --config.file=rabbitmq.yml` 的命令启动服务。 4. **验证**:在浏览器中访问 `rabbitmq_exporter` 的默认端口(通常是9090)上的 `/metrics` 端点,确认可以看到 ...
- **rabbitmq_channel_open**: 打开一个新的通道,通道是RabbitMQ中进行操作的基本单位。 - **rabbitmq_exchange_declare**: 声明一个交换机,定义其类型(如direct、fanout、topic等)。 - **rabbitmq_queue_...
4. **自动化部署**:结合Windows的任务计划程序,可以自动化执行RabbitMQ的备份、升级等操作。 以上就是关于RabbitMQ在Windows环境下安装和使用的基本知识,以及它的核心概念和分布式特性。理解并掌握这些内容,将...
在IT行业中,RabbitMQ是一种广泛使用的开源消息代理和队列服务器,尤其在分布式系统中,它扮演着关键角色,负责处理异步任务...总之,升级RabbitMQ是一项重要的系统维护任务,需要谨慎操作,确保系统的连续性和稳定性。
了解如何在应用程序中使用这些库来发送和接收消息是使用RabbitMQ的实际操作部分。 10. **故障恢复与高可用性**:RabbitMQ支持集群模式,通过将多个节点组成集群,可以提高系统的可用性和容错性。理解如何配置和管理...
在Linux上,使用`systemctl start rabbitmq-server`或者`service rabbitmq-server start`命令。 RabbitMQ的核心概念包括: 1. **节点(Node)**:RabbitMQ服务器本身就是一个节点,它可以是集群的一部分,也可以...
在Windows操作系统上安装RabbitMQ,你需要按照以下步骤进行: 1. **下载RabbitMQ组件**: 首先,你需要获取两个必要的文件,它们在你提供的压缩包文件中已经包含:`otp_win64_20.2.exe` 和 `rabbitmq-server-3.7.4...
5. 通过命令行工具启动和停止RabbitMQ,例如使用`rabbitmq-server start`命令启动服务,使用`rabbitmqctl`工具进行插件管理和服务器启停。 RabbitMQ的高性能主要依赖于Erlang语言的特性,如高效的进程间通信和容错...