您的位置:首页 > 其它

简述RabbitMQ的基本应用

2015-07-13 16:48 260 查看

一、安装RabbitMQ

下载并安装Erlang,地址:http://www.erlang.org/download.html

下载并安装RabbitMQ,地址:http://www.rabbitmq.com/download.html

二、配置RabbitMQ

需要先配置Erlang的环境变量:ERLANG_HOME = C:\Program Files\erl7.0

主要参考官方文档:http://www.rabbitmq.com/configure.html

一般情况下,RabbitMQ的默认配置就足够了。如果希望特殊设置的话,有两个途径:

一个是环境变量的配置文件 rabbitmq-env.conf ;

一个是配置信息的配置文件 rabbitmq.config;

注意,这两个文件默认是没有的,如果需要必须自己创建。

rabbitmq-env.conf

这个文件的位置是确定和不能改变的,位于:/etc/rabbitmq目录下(这个目录需要自己创建)。

文件的内容包括了RabbitMQ的一些环境变量,常用的有:

#RABBITMQ_NODE_PORT= //端口号

#HOSTNAME=

RABBITMQ_NODENAME=mq

RABBITMQ_CONFIG_FILE= //配置文件的路径

RABBITMQ_MNESIA_BASE=/rabbitmq/data //需要使用的MNESIA数据库的路径

RABBITMQ_LOG_BASE=/rabbitmq/log //log的路径

RABBITMQ_PLUGINS_DIR=/rabbitmq/plugins //插件的路径

具体的列表见:http://www.rabbitmq.com/configure.html#define-environment-variables

rabbitmq.config

这是一个标准的erlang配置文件。它必须符合erlang配置文件的标准。

它既有默认的目录,也可以在rabbitmq-env.conf文件中配置。

文件的内容详见:http://www.rabbitmq.com/configure.html#config-items

三、监控RabbitMQ

主要参考官方文档:http://www.rabbitmq.com/management.html

RabbitMQ提供了一个web的监控页面系统,这个系统是以Plugin的方式进行调用的。

management plugin默认就在RabbitMQ的发布版本中,只需要enable就可以了,执行以下命令:

重新启动RabbitMQ,输入http://server-name:55672/mgmt/就能够进入到监控页面。默认的用户名和密码是: guest 和guest。

其中server-name可以在命令行查询 hostname;

若login failed,可能是因为没有预设用户,或权限问题,可参见 http://blog.csdn.net/zyz511919766/article/details/42292655
修改用户的权限或新建用户并赋予权限。

RabbitMQ 默认端口:

4369 (epmd), 25672 (Erlang distribution)
5672, 5671 (AMQP 0-9-1 without and with TLS)
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)

Web界面管理RabbitMQ:

默认可以通过http://serverip:15672访问RabbitMQ的Web管理界面,默认用户名密码都是guest。

(注意:RabbitMQ 3.0之前的版本默认端口是55672,下同)

RabbitMQ提供的HTTP API接口:

RabbitMQ还提供了HTTP API接口,这样可以通过编程方式监控RabbitMQ的运行状态,

HTTP API接口的地址为:http://serverip:15672/api/

四、RabbitMQ生产者流量控制

Q:MQ
们为什么要做生产者流量控制?
A:麻烦就在于:『像 Erlang的虚拟机实现和设计上都没有阻止用户往一个进程的消息队列里扔消息,当消息的生产速度过快,超过进程的处理能力时,这些消息就堆积起来,占用越来愈多的内存,最终导致VM崩溃。』
Q:我为什么要知道 MQ在做生产者流量控制?
A:当你发现自家的 Producers动辄被挂起或被阻塞时,你要知道该调 Consumer 的消费速率,还是调 Memory Threshold of MQ 。

一,RabbitMQ 2.8.0+的流量控制

RabbitMQ 2.8.0+引入了一个新特性“internal flowcontrol”。
至此 RabbitMQ 有三种流量控制:

1.1. Per-ConnectionFlow Control
是面向每一个连接做的流量控制。
即,RabbitMQ 会主动阻塞(Block)那些发布消息太快的连接(Connections),无需做任何配置。
如果连接被阻塞了,那么它在 rabbitmqctl控制台上会显示一个blocked的状态。
RabbitMQ 的流量控制机制是基于信用证(Credit)的拥塞控制机制。

1.2. Memory-BasedFlow Control
RabbitMQ 会在启动时检测机器的物理内存数值。默认当 MQ占用 40% 以上内存时,MQ 会主动抛出一个内存警告并阻塞所有连接(Connections)。
你也可以通过修改 rabbitmq.config 文件来调整内存阈值,默认值是 0.4,如下所示:
[{rabbit, [{vm_memory_high_watermark, 0.4}]}].
当 MQ 启动时,该内存阈值也会写入到 RABBITMQ_NODENAME.log 文件里,如下所示:
Memory limit set to 2048MB.
如果 MQ Server 不能识别你的系统,或者你在用 Windows 系统,那么它会写一个警告信息到 RABBITMQ_NODENAME.log 文件里,如下所示:
=WARNING REPORT==== 29-Oct-2009::17:23:44 ===
Unknown total memory size for your OS{unix,magic_homebrew_os}. Assuming memory size is 1024MB.

1.3. Disk-Based FlowControl
默认情况,如果剩余磁盘空间在 1GB 以下,RabbitMQ 主动阻塞所有的生产者。这个阈值也是可调的。

参考资料:
RabbitMQ Flow Control: http://www.rabbitmq.com/memory.html http://hg.rabbitmq.com/rabbitmq-server/file/default/src/credit_flow.erl

RabbitMQ流量控制机制简单分析: http://ybbct.iteye.com/blog/1562271
通过流控机制分析 RabbitMQ 性能(持久化)瓶颈
http://activemq.apache.org/producer-flow-control.html http://working-with-activemq.blogspot.com/2012/05/performance-improvements.html http://stackoverflow.com/questions/5291679/activemq-topic-flooding http://www.huaishao8.com/tag/activemq http://blog.csdn.net/lmj623565791/article/category/2386657 http://www.cnblogs.com/zhengyun_ustc/archive/2012/08/25/flowcontrol.html http://blog.chinaunix.net/topic/surpershi/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: