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

原创 2017年01月03日 21:59:01

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 整型(字节) 16777216 RabbitMQ垃圾收集存储内容之前,消息存储数据库的最大大小
queue_index_max_journal_entries 整型 262144 在转储到消息存储数据库并提交之前,消息存储日志里的最大条数

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

RabbitMQ从入门到精通----运行与管理

在上文中我们已经简单的介绍了AMQP消息通信的基本概念,并对运行环境进行了安装,但是当我们将RabbitMQ部署在线上的时候,有涉及到了RabbitMQ的优化,在本节中我们 着重讲解RabbitMQ的...

Nginx + Keepalived 实例(测试可行)

Nginx_Master: 192.168.1.103 提供负载均衡 Nginx_BackUp: 192.168.1.104 负载均衡备机 Nginx_VIP_TP: 192....

rabbitmq的命令和Web UI管理消息服务器

1、文件的解压 .tar.gz文件,这种文件是tar文件的压缩文件,可以使用tar命令进行解压。 单纯的.gz文件解压,这种文件不可以使用tar命令解压,需要用gunzip解压,使用命令gzi...

rabbitmq 学习-5-server管理

rabbitmq 学习-5-server管理rabbitmq2010-04-26 20:10:53阅读705评论0  字号:大中小 订阅RabbitMQ Server Administrator's ...

windows下安装RabbitMQ消息服务器

  • 2016年03月18日 09:57
  • 228KB
  • 下载

windows 下 安装 RabbitMQ 服务器 环境

第一步:安装Erlang(RabbitMQ是基于Erlang的,所以首先必须配置Erlang环境。)         版本:otp_win32_R15B01.exe          安装目录:...

RabbitMQ_安装配置与管理

  • 2016年12月05日 10:04
  • 523KB
  • 下载

RabbitMQ 消息队列服务器 进程通讯

本次学习主要是参考了张聪,[翻译] [RabbitMQ+Python入门经典]兔子和兔子窝,其实这个是译文,原文还可以查看这里原文 “ 过去的4年里,人们写了有好多好多的开源的MQ服务器啊。其...
  • gausszh
  • gausszh
  • 2012年09月03日 10:51
  • 1300

RabbitMQ消息队列+spring监听mq服务器,接收消费mq消息

最近soa项目要和官网系统对接,实现mq信息监听,保存等一些列操作。项目用的是Maven+SSM框架。然后学习和开发用了两天时间,算是搞定,趁加班时间做个总结。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RabbitMQ学习(一)-----------服务器管理
举报原因:
原因补充:

(最多只允许输入30个字)