RabbitMQ学习(一)-----------服务器管理

1.启动节点

  事实上,一个节点描述的是一个Erlang节点运行着一个Erlang应用程序。

  当你运行Java程序时,JVM的一个实例就启动了,并且开始执行指定的Java程序。与之相似,Erlang也有虚拟机,而虚拟机的每个实例我们称之为节点(node)。这里的节点非常特殊,不同于JVM,多个Erlang应用程序可以运行在同一个节点之上。更重要的是,节点之间可以进行本地通信(不管它们是否真的在同一台服务器上)。举例来说,由于Erlang的魔力,一个运行在asparagus节点上的应用程序可以调用artichoke节点上的应用程序的方法,就好像这些函数是本地方法一样。同时,如果应用程序由于某些原因(例如RabbitMQ)崩溃了,Erlang节点会自动尝试重启应用程序(前提是Erlang本身没有崩溃)。现在重要的是记住当我们谈到RabbitMQ节点时,我们指的是RabbitMQ应用程序和其所在的Erlang节点。





  值得庆幸的是,RabbitMQ使用启动Erlang节点和Rabbit应用程序很简单,只需一个步骤即可。在你的RabiitMQ安装目录下找到sbin目录,运行./rabbitmq-server。当查看控制台时,你会发现不同的RabbitMQ子系统运行起来了,并准备好处理消息。如果在启动过程中遇到了任何错误,那么就检查一下RabbitMQ的日志。通常情况下,可以在/var/log/rabbitmq目录下找到名为rabbit@[hostname].log的日志文件(文件名中的"rabbit"部分是运行RabbitMQ的默认Erlang节点名称)。你也可以通过增加-detached参数的方式启动Rabbit节点,以守护程序的方式在后台运行:./rabbitmq -server -detached。这就是启动单一RabbitMQ节点的所有内容了。


2.停止节点

  有两种方式:干净的方式和肮脏的方式。当运行RabiitMQ连接到控制台时,在你按下CTRL-C组合键时看到以下内容:

BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
       (v)ersion (k)ill (D)b-tables (d)istribution

  你在控制台上看到的是Erlang节点正询问你是想要关闭应用程序还是整个节点;或者这只是一个失误,因为你想要继续运行。通常来讲,你想要关闭整个节点,所以abort就是你要找的答案。但是有更好的办法来停止RabbitMQ------这个方法会通知RabbitMQ干净地关闭,并保护好那些持久化队列。

  rabbitmqctl是几乎所有RabbitMQ管理需要的一站式解决方案。当在RabbitMQ安装目录下运行./sbin/rabbitmqctl stop时,rabbitmqctl会和本地节点通信并指示其干净地关闭。你也可以指定关闭不同的节点,包括远程节点。只需传入-n rabbit@[hostname]选项即可。这时,整个RabbitMQ节点包括Erlang都关闭了。有时候,你只想停止RabbitMQ应用程序,而让Erlang实例继续运行。让我们看看如何做到这一点。


3.关闭和重启应用程序:有何差别

  到目前为止,我们讨论了如何停止整个RabbitMQ节点。但有时候你只想要重启RabbitMQ应用程序,而同时保持Erlang节点运行。这有什么好处呢?对集群来说,这种做法是必需的。rabbitmq-server同时启动了节点和应用程序,因为它把RabbitMQ应用程序预先配置成了独立运行模式。为了把节点加入现有集群中,你需要做的是停止应用程序,把节点重置为原始状态。这样节点就准备好加入集群了。如果你使用./rabbitmqctl stop命令的话,就会把应用程序和节点同时关闭。这时如果运行./rabbitmq-server,由于独立运行模式的关系,又会迫使你把应用程序和节点同时启动起来。另外还有一点就是,你会在同一节点上运行除了RabbitMQ之外的其它Erlang程序,这使得停止整个节点是不可取的。

  停止RabbitMQ轻而易举。只需运行./rabbitmqctl stop_app即可。


4.Rabbit配置文件

  像大多数服务器应用程序一样,RabbitMQ允许你设置系统范围内的可调参数并通过配置文件进行设置。典型地,该配置文件位于/etc/rabbitmq/rabbitmq.config。不过,文件位置可以通过rabbitmq-server脚本对CONFIG_FILE环境变量进行设置。你会发现rabbitmq.config的文件格式有点吓人:

[ {mnesia, [{dump_log_write_threshold, 1000}]},
{rabbit, [{vm_memory_high_watermark, 0.4}]}  ].

你看到的本质上是原始的Erlang数据结构。如果你对Python,JavaScript或者其他任何现代编程语言熟悉的话,一旦对它进行分解之后,就很容易理解了。

[
    {mnesia, [{dump_log_write_threshold, 1000}]},
    {rabbit, [{vm_memory_high_watermark, 0.4}]}  
].

  这样看起来就好多了。RabbitMQ配置文件本质上是一个包含了嵌套哈希表(字典或者命名数组)的数组。第一行和第四行分别开启和关闭了配置数组。通过外部配置数组,每个Erlang应用程序都会有自己的哈希表来配置选项(此处有两个应用)。mnesia指的是Mnesia数据库配置选项(是RabbitMQ用来存储交换器和队列元数据的)。rabbit指的是RabbitMQ特定的配置选项。每个选项都表达为这种形式:{[option_name],[option_value]}。例如,{dump_log_write_threshold, 1000}更改了Mnesia把条目从仅限追加的日志文件刷出到真实数据库文件的频度。为了添加另一个Mnesia配置选项,只需增加一个{[option_name],[option_value]}条目,该条目需要和最后一个之间以逗号隔开。

 注意:RabbitMQ中的每个队列,交换器和绑定的元数据(除了消息的内容)都是保存到Mnesia的。Mnesia是内建在Erlang的非SQL型数据库。Mnesia通过将RabbitMQ元数据首先写入一个仅限追加的日志文件,以确保其完整性。然后,它再定期将日志内容转储到真实的Mnesia数据库文件中。如果你对MySQL的InnoDB这样的日志型数据库,或者像XFS这样的日志文件系统的工作方式熟悉的话,它们在概念上是相同的。Mnesia的dump_log_write_threshold选项控制着转储的频度。设置为1000意味着每1000个条目就转储日志内容到数据库文件。

  子解了Rabbit配置文件的格式,我们来看看可以更改哪些选项。

 

选项名称
值类型默认值描述
dump_log_write_threshold整型100将仅限追加的日志内容刷出/转储至真实数据库的频度。
tcp_listeners
{"ip地址",端口号}
数组[{"0.0.0.0",5672},]定义RabbitMQ应该监听的非SSL加密通信的IP地址和端口号
ssl_listeners
{"键":"值”}

数组定义RabbitMQ应该监听的SSL加密通信的IP地址和端口号
ssl_options
{"键":"值“}
数组指定SSL相关选项。有效的选项有cacertfile(CA证书文件),keyfile(服务器密钥文件)和fail_if_no_peer_cert(需要客户端安装有效证书:True/Fasle)
vm_memory_high_watermark十进制百分数0.4控制RabbitMQ允许消耗的内存。它以十进制数值的形式明确了Rabbit允许使用的安装内存百分比(0.4=40%)
msg_store_file_size_limit整型(字节)16777216RabbitMQ垃圾收集存储内容之前,消息存储数据库的最大大小
queue_index_max_journal_entries整型262144在转储到消息存储数据库并提交之前,消息存储日志里的最大条数

  虽然配置文件允许更改RabbitMQ运作的方方面面,但有一件事配置文件做不了:对RabbitMQ的访问控制。RabbitMQ有个专业子系统专门负责权限。下一节来一步步熟悉权限控制。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self-motivation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值