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有个专业子系统专门负责权限。下一节来一步步熟悉权限控制。

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

相关文章推荐

Openstack源码分析 Neutron源码分析(二)-------------rpc篇

上一篇分析了neutron wsgi应用的源码,这一篇分析另外一部分核心功能,rpc篇。 还是上篇的代码,启动完wsgi后,启动rpc_workers。 neutron/server/wsgi_ev...

OpenStack源码分析 Neutron源码分析(一)-----------Restful API篇

OpenStack的大部分组件都由2部分核心功能构成,一方面通过WSGI应用对外提供Restful API的接口;另一方面通过某种消息队列(通常为RabbitMQ)实现RPC,方便插件侧和agent间...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

VMware中Bridged、NAT、host-only三种网络连接模式的原理及其区别

不同虚拟交换机应用在不同的联网模式Bridged、NAT、host-only、custom四种模式,下面分别介绍其具体分配: VMnet0:这是VMware用于虚拟桥接网络下的虚拟交换机; VMnet...

Openstack源码分析 Ml2Plugin start_rpc_listener流程

上一篇分析到rpc服务的启动过程,主要就是在子进程中调用插件的start_rpc_listeners方法来消费特定的mq队列消息,并将消息转换为本地方法调用进行处理。本篇详细分析这个流程。 首先把...

python中的paste deploy

谈到WSGI,就免不了要了解paste,其中paste deploy是用来发现和配置WSGI应用的一套系统,对于WSGI应用的使用者而言,可以方便地从配置文件汇总加载WSGI应用(loadapp);对...

Flask系列教程(二)--------------使用SQLAlchemy创建数据模型

创建user表 Z:\python\flask_tutorials>python manage.py shell >>> db.create_all() 2016-12-30 22:58:44,661...

scrapy爬虫实战(四)--------------登陆51job并使用cookies进行爬取

本文章代码仅供学习使用,如有侵权请联系作者删除,多谢。 主要通过一个scrapy爬虫,理解如何登陆网站并使用登陆后的cookies继续爬取。 登陆的用户名密码用XXX表示。 # ...

Celery源码分析(二)--------任务执行单元Worker的流程

上一节中讲到通过命令行构造"celery.apps.worker::Worker"对象,然后就调用Worker对象的start方法启动Worker. 因此,这个Worker对象是一个核心对象,下面着重...

Celery源码分析(五)----------Consumer的Blueprint

紧接着上一篇教程,接着分析Consumer的Blueprint的流程。 由于Consumer步骤的create方法将创建的celery.worker.consumer::Consumer对象返回了,所...

openstack Neutron源码分析(三)------linuxbridge-agent

直接从源码开始分析 neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py: common_confi...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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