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,不错的小技巧!
暂时就摸索出来这么多东西了,准备拿几个不重要的任务跑跑稳定性试试.
相关推荐
执行相关命令 1.添加用户密码 rabbitmqctl add_user wenli wenli 2.设置wenli为管理员rabbitmqctl set_user_tags wenli administrator 3.启动RabbitMQ的web管理rabbitmq-plugins enable rabbitm
rabbitmq安装步骤以及简单的操作命令........
本套视频适合具有一定Linux常用命令操作基础,熟悉SpringBoot基本开发的程序开发设计人员。 课程内容主要分为:MQ简介、RabbitMQ运行环境搭建、RabbitMQ常用管理命令、RabbitMQ Web控制台使用、RabbitMQ的工作模型...
ansible 是一款轻量级自动化运维工具,由的 Python 语言开发,结合了多种自动化运维工具的特性,实现了批量系统配置,批量程序部署,批量命令执行等功能; ansible 是基于模块化实现批量操作的。
它的工作方式是从官方存储库中下载给定版本和操作系统的正确工件,然后将其解压缩并使用指定的配置启动RabbitMQ Server。 然后,可以使用对rabbitmqctl或rabbitmq-plugins等效命令从JVM内对代理进行管理。 先决...
rabbitMQ-3.6和erlang-17.3的安装包;windows_x64版本,包含mq及erlang的安装包,包含图文详细说明教程,即常用命令配置;
RabbitMQ常用操作命令和入门案例(一对一的简单模式)RabbitMQ常用操作命令和入门案例(一对一的简单模式)
Control-C会干净地停止所有操作。 这是一个在单个Docker环境中运行和两条小Python消息的最小示例。 publisher程序每5秒钟将一条消息发布到RabbitMQ; consumer程序将其收到的每条消息打印到其标准输出。 全面介绍...
通过 docker 执行此操作就像执行以下命令一样简单: sudo docker run -d -p 5672:5672 -p 15672:15672 -v ${pwd}/rabbitmq/data/log:/data/log -v ${pwd}/rabbitmq/data/mnesia:/data/mnesia --name rabbitmq ...
gamekeeper 具有三种操作模式,每种模式对应不同的功能子集,可通过以下子命令访问: 措施 measure子命令将从指定的--uri为许多 RabbitMQ/AMQP 原语发出一系列指标。 所有指标都以标识符为前缀(Ganglia、Graphite ...
任务队列,作业队列,异步,异步,rabbitmq,amqp,sms,sns,kakfa,redis,c#,命令,命令调度程序,命令处理器,队列,分布式 您可以在哪些情况下使用“更明亮”? 在实现干净的体系结构(端口和适配器)时,一...
在Java中使用RabbitMQ的异步Web-Worker模型 正如在“文章中所解释的那样,Web请求应尽快完成。 如果操作可能需要很长时间,则最好将其发送给工人测功机以在后台进行处理。 本文通过使用Spring 和以及Heroku 的示例...
主机管理项目命令分发器 主机管理项目提取主机列表 主机管理项目提取yaml配置文件_ 主机管理项目动态调用插件进行数据解析 主机管理项目对模块中的参数进行解析 第24周 本节题纲 上节内容回顾 ModelForm操作及验证...
>第二种情况比如你拿这个消息做redis的set操作,那么就不用操作,因为这个操作本身就是幂等的。 >第三种情况可以准备第三方的介质来做消费记录。拿redis举例,给消息分配一个全局id,只要是消费过该记录将,message>...
python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 ...16 Model操作之select_related以及...
命令⾏⽅式(Command Line Interface CLI):需要有⼀个控制台,输 ⼊特定的指令,让计算机完成⼀些操作。较为⿇烦,需要记录住⼀些 命令。 Pascal之⽗Nicklaus Wirth: "Algorithms+Data Structures=Programs" 4 .2...
1.个持stomp消息协议的messaging server(譬如activemq,rabbitmq) 3.些基本命令与操作(譬如nc,telnet) 1.建连
Tripda Search Worker 让 RabbitMQ 消费者在 ElasticSearch 中执行创建、更新和删除操作。 它的核心是使用 ruby 编程语言和 Sneakers 框架编写的。 要求 Ruby 1.9.3 > Tripda-搜索框 依赖关系 捆绑器 1.9.6 ...
它可以帮助用户自动安装RabbitMQ并预配置所需的项目,并且用户只需要在Linux上运行命令即可。 它简化了复杂的安装和初始化过程。系统要求安装此存储库的系统要求如下: 条件细节笔记操作系统CentOS7.x,Ubuntu18.04...
Java面试专题课解决面试过程中的一些常见问题,课程全面覆盖重难点Java面试题。包含了多个模块的面试题...9、熟练运用git、Linux操作系统等基本命令。 10、有高并发、高性能、高可用系统架构设计实践、并有性能调优经验