RabbitMQ管理(4)——应用管理
本文主要阐述应用与集群相关的一些操作管理命令,包括关闭、重置、开启服务,还有建立集群的一些信息。有关集群搭建更多的信息可以参考RabbitMQ的安装及集群搭建方法。
rabbitmqctl stop [pid_file]
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。如果指定了pid_file,还需要等待指定进程的结束。其中pid_file是通过调用rabbitmq-server启动RabbitMQ服务时创建的,默认情况下存放于Mnesia目录中,可以通过RABBITMQ_PID_FILE这个环境变量来改变存放路径。注意,如果是rabbitmq-server –detach启动的RabbitMQ服务则不会生成pid_file这个文件。
示例如下:
[root@node1 ~]# rabbitmqctl stop /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid Stopping and halting node rabbit@node1 [root@node1 ~]# rabbitmqctl stop Stopping and halting node rabbit@node1
rabbitmqctl shutdown
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。执行这个命令会阻塞直到Erlang虚拟机进程的退出。如果RabbitMQ没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop的不同的是,它不需要指定pid_file而可以阻塞等待指定进程的关闭。
示例如下:
[root@node1 ~]# rabbitmqctl shutdown Shutting down RabbitMQ node rabbit@node1 running at PID 1706 Waiting for PID 1706 to terminate RabbitMQ node rabbit@node1 running at PID 1706 successfully shut down
rabbitmqctl stop_app
停止RabbitMQ服务应用,但是Erlang虚拟机还是处于运行状态。此命令优先执行其他管理操作(这些管理操作需要先停止RabbitMQ应用),比如rabbitmqctl reset。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app Stopping rabbit application on node rabbit@node1
rabbitmqctl start_app
启动RabbitMQ应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用,譬如rabbitmqctl reset。
示例如下:
rabbitmqctl wait [pid_file]
等待RabbitMQ应用的启动。它会等到pid_file的创建,然后等待pid_file中的所代表的进程启动。当指定的进程没有启动RabbitMQ应用而关闭时将会返回失败。
示例如下:
[root@node1 ~]# rabbitmqctl wait /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid Waiting for rabbit@node1 pid is 3468 [root@node1 ~]# rabbitmqctl wait /opt/rabbitmq/var/lib/rabbitmq/mnesia/rabbit\@node1.pid Waiting for rabbit@node1 pid is 3468 Error: process_not_running
rabbitmqctl reset
将RabbitMQ节点重置还原到最初状态,包括从原所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost等,以及删除所有的持久化消息。执行rabbitmqctl reset命令前必须停止RabbitMQ应用(比如先执行rabbitmqctl stop_app)。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app Stopping rabbit application on node rabbit@node1 [root@node1 ~]# rabbitmqctl reset Resetting node rabbit@node1
rabbitmqctl force_reset
强制将RabbitMQ节点重置还原到最初状态。不同于rabbitmqctl reset,rabbitmqctl force_reset命令不论当前管理数据库的状态和集群配置是什么,会无条件地重置节点。它只能在数据库或集群配置已损坏的情况下才可使用。与rabbitmqctl reset命令一下,执行rabbitmqctl force_reset命令前必须先停止RabbitMQ应用。
示例如下:
[root@node1 ~]# rabbitmqctl stop_app Stopping rabbit application on node rabbit@node1 [root@node1 ~]# rabbitmqctl force_reset Forcefully resetting node rabbit@node1
rabbitmqctl rotate_logs {suffix}
指示RabbitMQ节点轮换日志文件。RabbitMQ节点会将原来的日志文件中的内容追加到“原始名称+后缀”的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,将会重新创建。如果不指定suffix,那么则日志文件只是重新打开而不会进行轮换。
示例如下所示,原日志文件为rabbit@node1.log和rabbit@node1-sasl.log,轮换日志之后,原日志文件中的内容就被追加到rabbit@node1.log.1和 rabbit@node1-sasl.log.1日志中,之后重新建立rabbit@node1.log和rabbit@node1-sasl.log文件用来接收新的日志。
-rw-r--r-- 1 root root 1024127 Aug 18 11:56 rabbit@node1.log -rw-r--r-- 1 root root 720553 Aug 17 19:16 rabbit@node1-sasl.log [root@node1 rabbitmq]# rabbitmqctl rotate_logs .1 Rotating logs to files with suffix ".1" [root@node1 rabbitmq]# ll -rw-r--r-- 1 root root 0 Aug 18 12:05 rabbit@node1.log -rw-r--r-- 1 root root 1024202 Aug 18 12:05 rabbit@node1.log.1 -rw-r--r-- 1 root root 0 Aug 18 12:05 rabbit@node1-sasl.log -rw-r--r-- 1 root root 720553 Aug 18 12:05 rabbit@node1-sasl.log.1
rabbitmqctl hipe_compile {directory}
将部分RabbitMQ代码用HiPE(HiPE是指High Performance Erlang ,是Erlang版的JIT)编译,并且将编译后的.beam文件(beam文件是Erlang编译器生成的文件格式,可以直接加载到Erlang虚拟机中运行的文件格式)保存到指定的文件目录中。如果这个目录不存在则会自行创建。如果这个目录中原本有任何.beam文件,则会在执行编译前被删除。如果要使用预编译的这些文件,需要设置RABBITMQ_SERVER_CODE_PATH这个环境变量来指定hipe_compile调用的路径。
示例如下:
[root@node1 rabbitmq]# rabbitmqctl hipe_compile /opt/rabbitmq/tmp/rabbit-hipe/ebin HiPE compiling: |---------------------------------------------------------| |#########################################################| Compiled 57 modules in 55s [root@node1 rabbitmq]# ls /opt/rabbitmq/tmp/rabbit-hipe/ebin array.beam proplists.beam rabbit_misc.beam credit_flow.beam qlc.beam rabbit_msg_file.beam delegate.beam queue.beam rabbit_msg_store.beam dict.beam rabbit_amqqueue.beam rabbit_msg_store_ets_index.beam file_handle_cache.beam rabbit_amqqueue_process.beam rabbit_net.beam gb_sets.beam rabbit_basic.beam rabbit_queue_index.beam gb_trees.beam rabbit_binary_generator.beam rabbit_reader.beam gen.beam rabbit_binary_parser.beam rabbit_router.beam gen_fsm.beam rabbit_channel.beam rabbit_trace.beam gen_server2.beam rabbit_command_assembler.beam rabbit_variable_queue.beam lists.beam rabbit_event.beam rabbit_writer.beam lqueue.beam rabbit_exchange.beam rpc.beam mnesia.beam rabbit_exchange_decorator.beam sets.beam mnesia_lib.beam rabbit_exchange_type_direct.beam sofs.beam mnesia_tm.beam rabbit_exchange_type_fanout.beam ssl.beam orddict.beam rabbit_exchange_type_topic.beam ssl_connection.beam ordsets.beam rabbit_framing_amqp_0_9_1.beam ssl_record.beam pmon.beam rabbit_guid.beam tls_connection.beam priority_queue.beam rabbit_limiter.beam tls_record.beam
rabbitmqctl join_cluster {cluster_node} [–ram] 将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。更多详细内容请参考RabbitMQ安装。
前面讲述的都是使用rabbitmqctl工具来管理RabbitMQ,有些时候你是否会觉得这种方式是不是不太友好?而且为能够运行rabbitmqctl工具,当前的用户需要拥有访问Erlang cookie的权限,由于服务器可能是以guest或者rabbit用户身份来运行的,因此你需要获得这些文件的访问权限,这样就引申出来一些权限管理的问题。
在RabbitMQ中,用户是访问控制(Access Control)的基本单元,且单个用户可以跨越多个vhost进行授权。针对一至多个vhost,用户可以被赋予不同级别的访问权限,并使用标准的用户名和密码来认证用户。
每一个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称为vhost。每一个vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器以及绑定关系等待,并且它拥有自己独立的权限。
3. rabbitmq 作为数据存储中心 4. openstack i 版中, rabbitmq 为 cinder, nova, neutron 组件进行数据存储, 5. openstack h 版使用的是 qpid 进程, 经常出现进程
相关文章
- 程序设计应用2023-04-01
- 云管平台可以应用于哪些行业?传统行业可以吗?
- [转]RabbitMQ入门教程(概念,应用场景,安装,使用)
- Windows Universal 应用 – Tip Calculator
- 上手做一个华为鸿蒙手表应用 2 - 在主页添加一个按钮并响应点击事件
- 《HTML5实战》——第1章 HTML5:从文档到应用的转变1.1 探索标记语言:HTML5速览
- iOS 应用开发中的断点续传实践总结
- iOS 如何写出更加严谨的应用
- 7月5日云栖精选夜读:物联网技术在农业领域的应用
- 太平保险技术总监黄雪英:客户分级认证与大数据应用
- 到2020年河北培育100个较大农业物联网应用典型
- Python中应用虚拟环境
- 【正点原子Linux连载】第二十章 V4L2摄像头应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1
- 使用PhoneGap开发基于Html5应用二:第一个PhoneGap应用:百度
- Harting推出新款RFID读取器,适用于铁路应用
- 微擎应用模块中的参数设置对应的前端页面
- nginx 代理https后,应用redirect https变成http --转
- RabbitMQ消息队列在PHP下的应用