您的位置:首页 > 其它

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

2017-01-03 21:59 155 查看
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有个专业子系统专门负责权限。下一节来一步步熟悉权限控制。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  rabbitMQ Erlang Mnesia