随笔 - 41  文章 - 7  trackbacks - 0
<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿

随笔分类

随笔档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜

     摘要: Consumer Tags从1.4.5版本开始,你可以提供一种策略来生成consumer tags.默认情况下,consumer tag是由broker来生成的.public interface ConsumerTagStrategy { String createConsumerTag(String queue); }该队列是可用的,所以它可以(可选)在tag中使用。参考Sectio...  阅读全文
posted @ 2016-08-13 12:48 胡小军 阅读(12978) | 评论 (0)编辑 收藏
     摘要: Queue Affinity 和 LocalizedQueueConnectionFactory当在集群中使用HA队列时,为了获取最佳性能,可以希望连接到主队列所在的物理broker. 虽然CachingConnectionFactory 可以配置为使用多个broker 地址; 这会失败的,client会尝试按顺序来连接. LocalizedQueueConnectionFac...  阅读全文
posted @ 2016-08-13 12:38 胡小军 阅读(6189) | 评论 (0)编辑 收藏
     摘要: 3. 参考这部分参考文档详细描述了组成Sring AMQP的各种组件. main chapter 涵盖了开发AMQP应用程序的核心类. 这部分也包含了有关示例程序的章节.3.1 使用 Spring AMQP在本章中,我们将探索接口和类,它们是使用Spring AMQP来开发应用程序的必要组件 .3.1.1 AMQP 抽象介绍Spring ...  阅读全文
posted @ 2016-08-13 12:21 胡小军 阅读(6555) | 评论 (0)编辑 收藏
     摘要: 原文:http://docs.spring.io/spring-amqp/docs/1.6.0.RELEASE/reference/html/1. 前言Spring AMQP项目将其核心Spring概念应用于基于AMQP消息解决方案的开发中.我们提供了一个发送和接收消息的高级抽象模板.同时,我们也提供了消息驱动POJO的支持.这些包有助于AMQP资源的管理,从而提升依赖注入和声明式配置的使用. 在...  阅读全文
posted @ 2016-08-13 12:03 胡小军 阅读(5863) | 评论 (0)编辑 收藏
     摘要: 1 概述1.1 本文档的目标此文档定义了一个网络协议-高级消息队列协议(AMQP), 它使一致的客户端程序可以与一致的消息中间件服务器进行通信.我们面对的是这个领域有经验的技术读者,同时还提供了足够的规范和指南.技术工程师可以根据这些文档,在任何硬件平台上使用各种编程语言来构建遵从该协议的解决方案。1.2 摘要1.2.1 为什么使用AMQP?AMQP在一致性客户端和消息中间件(也称为"broker...  阅读全文
posted @ 2016-08-12 18:30 胡小军 阅读(10680) | 评论 (0)编辑 收藏
     摘要: 原文:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#beans-java7.12.1 基本概念: @Bean 和 @Configuration在Spring新的Java配置支持中,其核心构件是@Configuration注解类和@Bean注解方法.@Bean 注解用来表示方...  阅读全文
posted @ 2016-08-05 17:04 胡小军 阅读(2287) | 评论 (0)编辑 收藏
     摘要: RabbitMQ内置支持TLS。自RabbitMQ 3.4.0起, 为防止 POODLE attack 攻击,已经自动禁用了SSLv3.使用TLS时,推荐安装的Erlang/OTP版本为17.5或以上版本. R16版本在某些证书中可以工作,但存在major limitations.必须安装Erlang加密程序,并且保证它能工作.对于那些从源码进行Erlang编译的Windows...  阅读全文
posted @ 2016-08-02 22:25 胡小军 阅读(11787) | 评论 (0)编辑 收藏
     摘要: 原文:http://www.rabbitmq.com/configure.htmlRabbitMQ 提供了三种方式来定制服务器:环境变量定义端口,文件位置和名称(接受shell输入,或者在环境配置文件(rabbitmq-env.conf)中设置)配置文件为服务器组件设置权限,限制和集群,也可以定义插件设置.运行时参数和策略可在运行时进行修改集群设置大部分设置都使用前面的两种方法,但本指南会全部讲解...  阅读全文
posted @ 2016-08-02 09:38 胡小军 阅读(49159) | 评论 (0)编辑 收藏

名称

rabbitmqctl — 用于管理中间件的命令行工具

语法

rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]

描述

RabbitMQ是AMQP的实现, 后者是高性能企业消息通信的新兴标准. RabbitMQ server是AMQP 中间件健壮的,可扩展的实现.

rabbitmqctl 用来管理RabbitMQ中间件的命令行工具.它通过连接中间件节点来执行所有操作。

如果中间件没有运行,将会显示诊断信息, 不能到达,或因不匹配Erlang cookie而拒绝连接.

选项

[-n node]

默认节点是"rabbit@server",此处的server是本地主机. 在一个名为"server.example.com"的主机上, RabbitMQ Erlang node 的节点名称通常是rabbit@server (除非RABBITMQ_NODENAME在启动时设置了非默认值). hostname -s 的输出通常是"@" 标志后的东西.查看rabbitmq-server(1)来了解配置RabbitMQ broker的细节.

[-q]

使用-q标志来启用宁静(quiet)模式,这会一致消息输出.

[-t timeout]

操作超时时间(秒为单位). 只适用于"list" 命令. 默认是无穷大.

命令

应用程序和集群管理

stop [pid_file]

用于停止运行RabbitMQ的Erlang node.如果指定了pid_file,还将等待指定的过程结束。例如:

rabbitmqctl stop

此命令会终止RabbitMQ node的运行.

stop_app

停止RabbitMQ application,但Erlang node会继续运行.此命令主要用于优先执行其它管理操作(这些管理操作需要先停止RabbitMQ application),如reset.例如:

rabbitmqctl stop_app

start_app

启动RabbitMQ application.

此命令典型用于在执行了其它管理操作之后,重新启动停止的RabbitMQ application。如reset.例如:

rabbitmqctl start_app

此命令来指导RabbitMQ node来启动RabbitMQ application.

wait {pid_file}

等待RabbitMQ application启动.此命令用来等待RabbitMQ application来启动node。它会等待创建pid文件,然后等待pid文件中的特定pid过程启动,最后等待RabbitMQ  application 来启动node. 

pid file是通过rabbitmq-server 脚本来创建的.默认情况下,它存放于Mnesia目录中. 修改RABBITMQ_PID_FILE 环境变量可以改变此位置。如:

rabbitmqctl wait /var/run/rabbitmq/pid

此命令会在RabbitMQ node启动后返回.

reset

将RabbitMQ node还原到最初状态.包括从所在群集中删除此node,从管理数据库中删除所有配置数据,如已配置的用户和虚拟主机,以及删除所有持久化消息.

执行reset和force_reset之前,必须停止RabbitMQ application ,如使用stop_app.

示例:

rabbitmqctl reset

此命令会重设RabbitMQ node.

force_reset

强制RabbitMQ node还原到最初状态.

不同于reset , force_reset 命令会无条件地重设node,不论当前管理数据库的状态和集群配置是什么. 它只能在数据库或集群配置已损坏的情况下才可使用。

执行reset和force_reset之前,必须停止RabbitMQ application ,如使用stop_app.

示例:

rabbitmqctl force_reset

此命令会重设RabbitMQnode.

rotate_logs {suffix}

指示RabbitMQ node循环日志文件.

RabbitMQ 中间件会将原来日志文件中的内容追加到原始名称和后辍的日志文件中,然后再将原始日志文件内容复制到新创建的日志上。实际上,当前日志内容会移到以此后辍结尾的文件上。当目标文件不存在时,将会进行创建。如果不指定后辍,则不会发生循环,日志文件只是重新打开。示例:

rabbitmqctl rotate_logs .1

此命令指示RabbitMQ node将日志文件的内容追加到新日志文件(文件名由原日志文件名和.1后辍构成)中。如. rabbit@mymachine.log.1 和 rabbit@mymachine-sasl.log.1. 最后, 日志会在原始位置恢复到新文件中.

集群管理

join_cluster {clusternode} [--ram]

clusternode

加入集群的节点.

[--ram]

如果进行了设置,节点将以RAM节点身份加入集群.

指导节点成为集群中的一员. 在加入集群之前,节点会重置,因此在使用此命令时,必须小心. 这个命令要成功,RabbitMQ应用程序必须先停止,如stop_app.

集群节点可以是两种类型: 磁盘节点(Disc Node) 或 内存节点(RAM Node).磁盘节点会在RAM和磁盘中复制数据, 通过冗余可以防止节点失效事件,并可从断电这种全局事件中进行恢复. RAM节点只在RAM中复制数据(除了队列的内容外,还依赖于队列是否是持久化的或者内容对于内存来说是否过大) ,并主要用于可伸缩性. RAM节点只有当管理资源(如,增加/删除队列,交换机,或绑定)的时候才具有更高的性能.一个集群必须至少有一个磁盘节点,通常来说还不止一个.

默认情况下,节点是磁盘节点.如果你想要创建内存节点,需要提供--ram 标志.

在执行cluster命令之后, 无论何时,当前节点上启动的RabbitMQ 应用程序在节点宕机的情况下,会尝试连接集群中的其它节点。

要脱离集群, 必须重设(reset)节点. 你也可以通过forget_cluster_node 命令来远程删除节点.

更多详情,参考集群指南.

例如:

rabbitmqctl join_cluster hare@elena --ram

此命令用于指示RabbitMQ node以ram节点的形式将 hare@elena 加入集群.

cluster_status

按节点类型来分组展示集群中的所有节点,包括当前运行的节点.

例如:

rabbitmqctl cluster_status

此命令会显示集群中的所有节点.

change_cluster_node_type {disc | ram}

修改集群节点的类型. 要成功执行此操作,必须首先停止节点,要将节点转换为RAM节点,则此节点不能是集群中的唯一disc节点。

例如:

rabbitmqctl change_cluster_node_type disc

此命令会将一个RAM节点转换为disc节点.

forget_cluster_node [--offline]

[--offline]

允许节点从脱机节点中删除. 这只在所有节点都脱机且最后一个掉线节点不能再上线的情况下有用,从而防止整个集群从启动。它不能使用在其它情况下,因为这会导致不一致

远程删除一个集群节点.要删除的节点必须是脱机的, 而在删除节点期间节点必须是在线的,除非使用了--offline 标志.

当使用--offline 标志时,rabbitmqctl不会尝试正常连接节点;相反,它会临时改变节点以作修改.如果节点不能正常启动的话,这是非常有用的.在这种情况下,节点将变成集群元数据的规范源(例如,队列的存在),即使它不是以前的。因此,如果有可能,你应该在最新的节点上使用这个命令来关闭。

例如:

rabbitmqctl -n hare@mcnulty forget_cluster_node rabbit@stringer

此命令会从节点hare@mcnulty中删除rabbit@stringer节点.

rename_cluster_node {oldnode1} {newnode1} [oldnode2] [newnode2 ...]

支持在本地数据库中重命名集群节点.

此子命令会促使rabbitmqctl临时改变节点以作出修改. 因此本地集群必须是停止的,其它节点可以是在线或离线的.

这个子命令接偶数个参数,成对表示节点的旧名称和新名称.你必须指定节点的旧名称和新名称,因为其它停止的节点也可能在同一时间重命名.

同时停止所有节点来重命名也是可以的(在这种情况下,每个节点都必须给出旧名称和新名称)或一次停止一个节点来重命名(在这种情况下,每个节点只需要被告知其名句是如何变化的).

例如:

rabbitmqctl rename_cluster_node rabbit@misshelpful rabbit@cordelia

此命令来将节点名称rabbit@misshelpful 重命名为rabbit@cordelia.

update_cluster_nodes {clusternode}

clusternode

用于咨询具有最新消息的节点.

指示已集群的节点醒来时联系clusternode.这不同于join_cluster ,因为它不会加入任何集群 - 它会检查节点已经以clusternode的形式存在于集群中了.

需要这个命令的动机是当节点离线时,集群可以变化.考虑这样的情况,节点A和节点B都在集群里边,这里节点A掉线了,C又和B集群了,然后B又离开了集群.当A醒来的时候,它会尝试联系B,但这会失败,因为B已经不在集群中了.update_cluster_nodes -n A C 可解决这种场景.

force_boot

确保节点将在下一次启动,即使它不是最后一个关闭的。通常情况下,当你关闭整个RabbitMQ 集群时,你重启的第一个节点应该是最后一个下线的节点,因为它可以看到其它节点所看不到的事情. 但有时这是不可能的:例如,如果整个集群是失去了电力而所有节点都在想它不是最后一个关闭的.

在这种节点掉线情况下,你可以调用rabbitmqctl force_boot .这就告诉节点下一次无条件的启动节点.在此节点关闭后,集群的任何变化,它都会丢失.

如果最后一个掉线的节点永久丢失了,那么你需要优先使用rabbitmqctl forget_cluster_node --offline因为它可以确保在丢失的节点上掌握的镜像队列得到提升。

例如:

rabbitmqctl force_boot

这可以强制节点下次启动时不用等待其它节点.

sync_queue [-p vhost] {queue}

queue
同步队列的名称

指示未同步slaves上的镜像队列自行同步.同步发生时,队列会阻塞(所有出入队列的发布者和消费者都会阻塞).此命令成功执行后,队列必须是镜像的.

注意,未同步队列中的消息被耗尽后,最终也会变成同步. 此命令主要用于未耗尽的队列。

cancel_sync_queue [-p vhost] {queue}

queue

取消同步的队列名称.

指示同步镜像队列停止同步.

purge_queue [-p vhost] {queue}

queue

要清除队列的名称.

清除队列(删除其中的所有消息).

set_cluster_name {name}

设置集群名称. 集群名称在client连接时,会通报给client,也可用于federation和shovel插件记录消息的来源地. 群集名称默认是来自在群集中的第一个节点的主机名,但可以改变。

例如:

rabbitmqctl set_cluster_name london

设置集群名称为"london".

用户管理

注意rabbitmqctl 管理RabbitMQ 内部用户数据库. 任何来自其它认证后端的用户对于rabbitmqctl来说是不可见的.

add_user {username} {password}

username

要创建的用户名称.

password

设置创建用户登录broker的密码.       

rabbitmqctl add_user tonyg changeit

此命令用于指示RabbitMQ broker 创建一个拥有非管理权限的用户,其名称为tonyg, 初始密码为changeit.


delete_user {username}

username

要删除的用户名称.

例如:

rabbitmqctl delete_user tonyg

此命令用于指示RabbitMQ broker删除名为tonyg的用户

change_password {username} {newpassword}

username

要修改密码的用户名称.

newpassword

用户的新密码.

例如:

rabbitmqctl change_password tonyg newpass

此命令用于指定RabbitMQ broker将tonyg 用户的密码修改为newpass.

clear_password {username}

username

要清除密码的用户名称.

例如:

rabbitmqctl clear_password tonyg

此命令会指示RabbitMQ broker清除名为tonyg的用户密码.现在,此用户不能使用密码登录(但可以通过SASL EXTERNAL登录,如果配置了的话).

authenticate_user {username} {password}

username

用户的名称.

password

用户的密码.

例如:

rabbitmqctl authenticate_user tonyg verifyit

此命令会指示RabbitMQ broker以名称为tonyg, 密码为verifyit来进行验证.

set_user_tags {username} {tag ...}

username

要设置tag的用户名称.

tag

用于设置0个,1个或多个tags.任何现有的tags都将被删除.

例如:

rabbitmqctl set_user_tags tonyg administrator

此命令指示RabbitMQ broker用于确保tonyg 是administrator.当通过AMQP来登录时,这没有什么效果,但用户通过其它的途经来登录时,它可用来管理用户,虚拟主机和权限(如使用管理插件).

rabbitmqctl set_user_tags tonyg

此命令会指示RabbitMQ broker删除tonyg上的任何现有的tag.

list_users

列出用户. 每个结果行都包含用户名,其后紧跟用户的tags.

例如:

rabbitmqctl list_users

此命令指示RabbitMQ broker列出所有用户.

访问控制

注意rabbitmqctl 会管理RabbitMQ的内部用户数据库. 无权限的用户将不能使用rabbitmqctl.

add_vhost {vhost}

vhost

要创建虚拟主机名称.

创建一个虚拟主机.

例如:

rabbitmqctl add_vhost test

此命令指示RabbitMQ broker来创建一个新的名为test的虚拟主机.

delete_vhost {vhost}

vhost

要删除的虚拟主机的名称.

删除一个虚拟主机.

删除一个虚拟主机,同时也会删除所有交换机,队列,绑定,用户权限,参数和策略.

例如:

rabbitmqctl delete_vhost test

此命令指示RabbitMQ broker删除名为test的虚拟主机.

list_vhosts [vhostinfoitem ...]

列出所有虚拟主机.

vhostinfoitem 参数用于标识哪些虚拟主机应该包含在结果集中.结果集中的列顺序会匹配参数的顺序.vhostinfoitem 可接受下面的值:

name

虚拟主机的名称.

tracing

是否对虚拟主机启用追踪.

如果没有指定vhostinfoitem 参数,那么会显示虚拟主机名称.

例如:

rabbitmqctl list_vhosts name tracing

此命令用于指示RabbitMQ broker显示所有虚拟主机.

set_permissions [-p vhost] {user} {conf} {write} {read}

vhost

授予用户可访问的虚拟机名称,默认是/.

user

可访问指定虚拟主机的用户名称.

conf

一个用于匹配用户在哪些资源名称上拥有配置权限的正则表达式

write

一个用于匹配用户在哪些资源名称上拥有写权限的正则表达式.

read

一个用于匹配用户在哪些资源名称上拥有读权限的正则表达式.

设置用户权限.

例如:

rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*"

此命令表示RabbitMQ broker授予tonyg 用户可访问 /myvhost虚拟主机,并在资源名称以"tonyg-"开头的所有资源上都具有配置权限,并在所有资源上都拥有读写权限。

clear_permissions [-p vhost] {username}

vhost

用于设置禁止用户访问的虚拟主机名称,默认为/.

username

禁止访问特定虚拟主机的用户名称.

设置用户权限.

例如:

rabbitmqctl clear_permissions -p /myvhost tonyg

此命令用于指示RabbitMQ broker禁止tonyg 用户访问/myvhost虚拟主机.

list_permissions [-p vhost]

vhost

用于指定虚拟主机名称,将会列出所有可访问此虚拟主机的所有用户名称和权限.默认为/.

显示虚拟机上权限.

例如:

rabbitmqctl list_permissions -p /myvhost

此命令指示RabbitMQ broker列出所有已授权访问/myvhost 虚拟主机的用户,同时也会列出这些用户能在虚拟主机资源可操作的权限.注意,空字符串表示没有任何授予的权限。

list_user_permissions {username}

username

要显示权限的用户名称.

列出用户权限.

例如:

rabbitmqctl list_user_permissions tonyg

此命令指示RabbitMQ broker列出tonyg可授权访问的所有虚拟主机名称,以及在这些虚拟主机上的操作.

参数管理

RabbitMQ的某些特性(如联合插件)是动态控制的. 每个参数都是与特定虚拟主机相关的组件名称, name和value构成的. 组件名称和name都是字符串,值是Erlang term. 参数可被设置,清除和显示.通常你可以参考文档来了解如何设置参数.

set_parameter [-p vhost] {component_name} {name} {value}

设置一个参数.

component_name

要设置的组件名称.

name

要设置的参数名称.

value

要设置的参数值,作不JSON项。在多数shells中,你更喜欢将其引起来.

例如:

rabbitmqctl set_parameter federation local_username '"guest"'

此命令用于在默认虚拟主机上设置federation 组件的local_username 参数值"guest".

clear_parameter [-p vhost] {component_name} {key}

清除参数.

component_name

要清除参数的组件名称.

name

要清除的参数名称.

例如:

rabbitmqctl clear_parameter federation local_username

此命令用于清除默认虚拟主机上的federation 组件的local_username 参数值.

list_parameters [-p vhost]

列出虚拟主机上的所有参数.

示例:

rabbitmqctl list_parameters

此命令用于列出默认虚拟主机上的所有参数.

策略管理

策略用于在集群范围的基础上用于控制和修改队列和交换机的行为. 策略应用于虚拟主机,由name, pattern, definition或可选的priority组成. 策略可被设置,清除和列举.

set_policy [-p vhost] [--priority priority] [--apply-to apply-to] {name} {pattern} {definition}

设置策略.

name

策略名称.

pattern

正则表达式, 匹配要应用的资源

definition

策略的定义,JSON形式.在大多数shells中,你很可能需要引用这个

priority

策略的整数优先级. 数字越高则优先级越高.默认是0.

apply-to

策略适用的对象类型,其值可为 "queues", "exchanges" 或 "all".默认是"all".

例如:

rabbitmqctl set_policy federate-me "^amq." '{"federation-upstream-set":"all"}'

此命令在默认虚拟主机上设置策略为federate-me,这样内建的交换器将进行联合.

clear_policy [-p vhost] {name}

清除策略.

name

要清除的策略名称.

例如:

rabbitmqctl clear_policy federate-me

此命令来清除默认虚拟主机上的federate-me 策略.

list_policies [-p vhost]

显示虚拟主机上的所有策略.

例如:

rabbitmqctl list_policies

此命令会显示默认虚拟主机上的所有策略.

服务器状态

服务器状态查询查询服务器返回一个结果以制表符分隔的列表. 某些查询(list_queueslist_exchangeslist_bindings, 和 list_consumers) 接受一个可选的vhost 参数. 如果这个参数出现了,那么它必须指定在查询的后面.

list_queues, list_exchanges and list_bindings 命令接受一个可选的虚拟主机参数以显示其结果.默认值为"/".

list_queues [-p vhost] [queueinfoitem ...]

返回队列的详细信息. 如果无-p标志,将显示/虚拟主机上的队列详情."-p" 标志可用来覆盖此默认值.

queueinfoitem 参数用于指示哪些队列信息项会包含在结果集中.结果集的列顺序将匹配参数的顺序.queueinfoitem 可以是下面列表中的任何值:

name

非ASCII字符的队列名称.

durable

服务器重启后,队列是否能幸存.

auto_delete

不再使用时,是否需要自动删除队列.

arguments

队列参数.

policy

应用到队列上的策略名称.

pid

关联队列的Erlang进程ID.

owner_pid

表示队列专用所有者的代表连接的Erlang进程ID.如果队列是非专用的,此值将为空.

exclusive

True:如果队列是专用的(即有owner_pid), 反之false

exclusive_consumer_pid

表示此channel的专用消费者订阅到此队列的Erlang进程Id. 如果没有专用消费者,则为空.

exclusive_consumer_tag

专用消费者订阅到此队列的Consumer tag.如果没有专用消费者,则为空.

messages_ready

准备分发给客户端的消息数目.

messages_unacknowledged

分发到客户端但尚未应答的消息数目.

messages

准备分发和未应答消息的总和(队列深度).

messages_ready_ram

驻留在ram中messages_ready的消息数目.

messages_unacknowledged_ram

驻留在ram中messages_unacknowledged的消息数目.

messages_ram

驻留在ram中的消息总数.

messages_persistent

队列中持久化消息的数目(对于瞬时队列总是0).

message_bytes

队列中所有消息体的大小总和.这不包括消息属性(包括headers) 或任何开销(overhead)。

message_bytes_ready

类似于message_bytes ,但只统计准备投递给clients的那些消息.

message_bytes_unacknowledged

类似于message_bytes ,但只统计那些已经投递给clients但还未应答的消息

message_bytes_ram

类似于message_bytes ,但只统计那些在RAM中的消息

message_bytes_persistent

类似于message_bytes ,但只统计那些持久化的消息

head_message_timestamp

如果存在,只显示队列中第1个消息的timestamp属性. 消息的时间戳只出现在分页情况下.

disk_reads

从队列启动开如,已从磁盘上读取该队列的消息总次数.

disk_writes

从队列启动开始,已向磁盘队列写消息总次数.

consumers

消费者数目.

consumer_utilisation

时间分数(0.0与1.0之间),队列可立即向消费者投递消息. 它可以小于1.0,如果消费者受限于网络堵塞或预提取数量.

memory

与队列相关的Erlang进程消耗的内存字节数,包括栈,堆以及内部结构.

slave_pids

如果队列是镜像的,这里给出的是当前slaves的IDs.

synchronised_slave_pids

如果队列是镜像的,当前slaves的IDs是master同步的- 即它们可在无消息丢失的情况下,接管master.

state

队列状态.正常情况下是'running', 但如果队列正在同步也可能是"{syncing, MsgCount}". 处于集群下的节点如果掉线了,队列状态交显示'down' (大多数queueinfoitems 将不可用).

如果没有指定queueinfoitems,那么将显示队列名称和队列深度.

例如:

rabbitmqctl list_queues -p /myvhost messages consumers

此命令显示了/myvhost虚拟主机中每个队列的深度和消费者数目.

list_exchanges [-p vhost] [exchangeinfoitem ...]

返回交换器细节.如果没有指定"-p"选项,将返回 / 虚拟主机的细节.  "-p" 选项可用来覆盖默认虚拟主机.

exchangeinfoitem 参数用来表示哪些交换器信息要包含在结果中. 结果集中列的顺序将与参数顺序保持一致. exchangeinfoitem 可接受下面的列表中任何值:

name

交换器名称.

type

交换器类型(如[directtopicheadersfanout]).

durable

当服务器重启时,交换器是否能复活.

auto_delete

当不再使用时,交换器是否需要自动删除.

internal

交换器是否是内部的,即不能由client直接发布.

arguments

交换器参数


policy

应用到交换器上的策略名称.

如果没有指定exchangeinfoitems,那么将会显示交换器类型和类型

例如:

rabbitmqctl list_exchanges -p /myvhost name type

此命令会显示/myvhost中每个交换器的名称和类型.

list_bindings [-p vhost] [bindinginfoitem ...]

返回绑定细节.默认情况下返回的是 / 虚拟主机上的绑定详情.可使用"-p" 标记来覆盖默认虚拟主机.

bindinginfoitem 参数用来表示结果中包含哪些绑定信息. 结果集中列的顺序将匹配参数的顺序.bindinginfoitem可接受下面列表的任意值:

source_name

绑定中消息来源的名称. C中非ASCII转义字符.

source_kind

绑定中消息来源的类别.当前总是exchange. C中非ASCII转义字符.

destination_name

绑定中消息目的地名称.C中非ASCII转义字符.

destination_kind

绑定中消息目的地的种类. C中非ASCII转义字符.

routing_key

绑定的路由键,C中非ASCII转义字符.

arguments

绑定参数.

如果没有指定bindinginfoitems,将会显示所有上述条目.

例如:

rabbitmqctl list_bindings -p /myvhost exchange_name queue_name

此命令来显示/myvhost虚拟主机上绑定的交换器名称和队列名称.

list_connections [connectioninfoitem ...]

返回TCP/IP连接统计.

connectioninfoitem 参数用来表示在结果中包含哪些连接信息. 结果集中列的顺序将匹配参数的顺序.               connectioninfoitem可接受下面列表的任意值:

pid

与连接相关的Erlang进程ID.

name

连接的可读名称.

port

服务器端口.

host

返回反向DNS获取的服务器主机名称,或 IP地址(反向DNS解析失败) 或者未启用.

peer_port

Peer 端口.

peer_host
   返回反向DNS获取的Peer主机名称,或 IP地址(反向DNS解析失败) 或者未启用.
ssl

用Boolean来表示连接是否是SSL的.

ssl_protocol

SSL 协议(如. tlsv1)

ssl_key_exchange

SSL key exchange 算法 (如 rsa)

ssl_cipher

SSL cipher 算法 (如aes_256_cbc)

ssl_hash

SSL hash 函数 (如 sha)

peer_cert_subject

peer的 SSL 安全证书的主体, RFC4514形式.

peer_cert_issuer

peer的 SSL安全证书的发行者, RFC4514 形式.

peer_cert_validity

peer的SSL安全证书的有效期.

state

连接状态(可为[startingtuningopeningrunningflowblockingblockedclosingclosed]其中一个).

channels
使用连接的channel数。
protocol

使用的AMQP协议版本(当前是{0,9,1} 或{0,8,0}). 注意,如果client请求的是AMQP 0-9 连接, 我们会视为AMQP 0-9-1.

auth_mechanism

使用的SASL认证机制,如PLAIN.

user

与连接相关的用户名

vhost

虚拟主机名称,C中非ASCII转义字符.

timeout

连接超时/协商的心跳间隔,秒为单位.

frame_max

最大 frame 大小(字节).

channel_max
        此连接上channel的最大数目.
client_properties

连接建立期间由client发送的信息属性.

recv_oct

Octets已收到.

recv_cnt

Packets 已收到.

send_oct

Octets 发送.

send_cnt

Packets 发送.

send_pend

发送队列大小.

connected_at

连接建立的日期和时间,当作timestamp.

如果没有connectioninfoitems, 那么会显示user, peer host, peer port,流量控制和内存块状态的时间

例如:

rabbitmqctl list_connections send_pend port

此命令会显示发送队列的大小以及第个连接的服务器端口.

list_channels [channelinfoitem ...]

返回所有当前channel上的信息,逻辑容器执行大部分 AMQP命令.这将包含最初AMQP连接的部分,以及不同插件和其它扩展创建的channels.

channelinfoitem 参数用来表示在结果集中包含哪些channel信息.结果集中列的顺序将匹配参数的顺序. channelinfoitem 可接受下面列表中的任何一个参数:

pid

与连接相关的Erlang进程ID.

connection

channel所属的连接Erlang进程ID.

name

channel的可读名称.

number

channel的数目,在一个连接中,它有唯一的标识符.

user

与channel相关的用户名称.

vhost

channel操作的虚拟主机.

transactional

True:如果channel处于事务模式,其它情况为false.

confirm

True:如果channel是确认模式,其它情况为false.

consumer_count

在channel中接收消息的逻辑AMQP消费者数目.

messages_unacknowledged

在channel中消息已投递但还未应答的消息数目.

messages_uncommitted

在channel中已收到消息但还没有提交事务的消息个数.

acks_uncommitted
确认收到一个还未提交的事务数。
messages_unconfirmed
尚未确认已发布消息的数目。在通道不在确认模式下时,这将是0。
prefetch_count

新消费者QoS预提取限制, 0表示无上限.

global_prefetch_count

整个channel QoS预提取限制, 0表示无上限.

如果没有指定channelinfoitems,那么将显示pid, user, consumer_count,messages_unacknowledged.


例如:

rabbitmqctl list_channels connection messages_unacknowledged

此命令会显示每个channel中连接进程和未应答消息的数目.

list_consumers [-p vhost]

列举消费者, 即订阅队列的消息流. 每行将打印出由制表符分隔的已订阅队列的名称,创建并管理订阅的channel进程的标识,channel中订阅的consumer tag唯一标识符, boolean值表示投递到此消费者的消息是否需要应答,整数值表示表示预提取限制(为0表示无限制), 以及关于此消费者的任何其它参数.

status

显示 broker 状态信息,如当前Erlang节点上运行的应用程序, RabbitMQ 和 Erlang 的版本信息, OS 名称, 内存和文件描述符统计信息. (查看cluster_status 命令来找出那些节点是集群化的以及正在运行的.)

例如:

rabbitmqctl status

此命令显示了RabbitMQ broker的相关信息.

environment

显示每个运行程序环境中每个变量的名称和值.

report

为所有服务器状态生成一个服务器状态报告,输出应该重定向到一个文件.

例如:

rabbitmqctl report > server_report.txt

此命令创建了一个服务器报告,可将它附着在支持请求的电子邮件中.

eval {expr}

执行任意Erlang表达式.

例如:

rabbitmqctl eval 'node().'

此命令用于返回rabbitmqctl连接的节点名称

杂项

close_connection {connectionpid} {explanation}

connectionpid

要关闭的与连接相关的Erlang进程ID.

explanation

解释字符串.

指示broker关闭与Erlang进程id相关的连接(可通过list_connections 命令查看), 通过为连接客户端传递解释字符串(作为AMQP连接关闭协议的一部分).

例如:

rabbitmqctl close_connection "<rabbit@tanto.4262.0>" "go away"

此命令指示RabbitMQ broker关闭与Erlang 进程id<rabbit@tanto.4262.0>相关联的连接, 同时向客户端传递go away字符串.

trace_on [-p vhost]

vhost

要开启追踪的虚拟主机的名称.

开启追踪.注意,追踪状态不是持久化的; 如果服务器重启,追踪状态将会丢失.

trace_off [-p vhost]

vhost

要停止追踪的虚拟主机名称.

停止追踪.

set_vm_memory_high_watermark {fraction}

fraction
当一个浮点数大于或等于0时,会触发流量控制新内存阈值部分。

set_vm_memory_high_watermark absolute {memory_limit}

memory_limit

流程控制触发的新内存限制, 以字节来表示大于或等于0的整数或以字符串和内存单位来表示(如 512M或1G). 可用的单位是: k, kiB: kibibytes (2^10 bytes) M, MiB: mebibytes (2^20) G, GiB: gibibytes (2^30) kB: kilobytes (10^3) MB: megabytes (10^6) GB: gigabytes (10^9)

set_disk_free_limit {disk_limit}

disk_limit

以整数或字符串单位的可用磁盘下限限制(查看vm_memory_high_watermark), 如 512M or 1G. 一旦可用磁盘空间达到这个限制,就会设置磁盘报警.

set_disk_free_limit mem_relative {fraction}

fraction

相对于整个可用内存的限制,其值为非负浮点数. 当值小于1.0时是很危险的,应该谨慎使用.

posted @ 2016-07-30 16:52 胡小军 阅读(12747) | 评论 (0)编辑 收藏
原文:http://www.rabbitmq.com/production-checklist.html
介绍
像RabbitMQ这样的数据服务经常有许多的可调参数.某些配置对于开发环境来说是意义的,但却不适合产品环境. 单个配置不能满足每种使用情况. 因此,在进入产品环境时,评估配置是很重要的. 这就是本指南提供帮助的目的.
虚拟主机,用户,权限
Virtual Hosts
在单租户环境中,例如,当RabbitMQ在产品环境中只致力于为某单个系统服务时,使用默认虚拟主机 (/)是非常好的.
在多租户环境中,为每个租户/环境使用单独的虚拟主机,如:project1_developmentproject1_productionproject2_developmentproject2_production, 等等.
用户
在产品环境中,删除默认用户(guest). 默认情况下,默认用户只能通过本地来连接, 因为它有众所周的凭证.为了不启用远程连接,可考虑使用带有administrative权限和生成密码的独立用户来代替
强烈建议在每个程序中使用单独的用户,例如,如果你有一个mobile app, 一个Web app, 和一个数据聚合系统, 你最好有3个独立的用户. 这会使许多事情变得更简单:
  • 使 client 连接与程序相关联
  • 使用细粒度的权限
  • 凭据翻滚(如. 周期性地或遭到破坏的情况下)
如果有许多相同应用程序的实例,有一个更好安全性权衡(每一个实例的凭据)和方便的配置(共享一些或所有实例之间的一组凭据)。物联网的应用涉及很多客户执行相同或相似的功能,有固定的IP地址,它可以使用X509证书或源IP地址范围验证。
资源限制
当消费者跟不上的时候,RabbitMQ 使用Resource-driven alarms (资源驱动报警)来压制(throttle)发布者. 在进入生产之前评估资源限制配置是重要的。
内存
默认情况下, RabbitMQ会使用可用RAM的40%. 这专门针对于那些运行RabbitMQ的节点,通常情况下,提高此限制是合理的. 然而,应注意的是,操作系统和文件系统的缓存也需要内存来运行。如果不这样做,会由于操作系统交换导致严重的吞吐量下降,甚至导致操作系统会终止RabbitMQ过程的运行。
下面是一些基本的指导方针,用于确定推荐的RAM limit:
  • 至少有128 MB
  • 当RAM达到4GB时,可配置为75%的RAM限制
  • 当RAM达到4GB-8GB时,可配置为80%的RAM限制
  • 当RAM达到8GB-16GB时,可配置为85%的RAM限制
  • 当RAM大于16GB时,可配置为90%的RAM限制
高于0.9的值是很危险的,不推荐配置
可用磁盘空间
必要的可用磁盘空间可防止disk space alarms.(磁盘空间报警) .默认情况下,RabbitMQ始终需要 50 MiB的可用磁盘空间.在大多数Linux发行者,根据开发者的经验,可将放置到小分区的/var 目录下. 然而,对于产品环境来说,这不是一个推荐值, 因为它们可能明显的更高的RAM 限制. 下面是一些基本的指导方针,如何确定有多少空闲磁盘空间是推荐的:
  • 至少有2 GB
  • 当限制为1到8GB的RAM时,可配置为RAM限制的50%
  • 当限制为8到32GB的RAM时,可配置为RAM限制的40%
  • 当限制超过32GB的RAM时,可配置为RAM限制的30%
rabbit.disk_free_limit 配置可通过 {mem_relative, N}来完成,使其相对于RAM限制的百分比来计算. 例如, 使用{mem_relative, 0.5} 设为50%, {mem_relative, 0.25}设为25%等等.
打开文件句柄限制
操作系统限制了并发打开的文件句柄的最大数量,其中包括网络套接字。确保您的限制设置得足够高,以允许预期数量的并发连接和队列。
对于有效RabbitMQ用户,确保你的环境允许至少50K的打开文件描述符,包括开发环境。
作为经验法则,并发连接数的95%乘以2再加上队列的总数可以计算出打开文件句柄限制( multiple the 95th percentile number of concurrent connections by 2 and add total number of queues to calculate recommended open file handle limit). 值高于500K也是恰当地,它不会消耗太多的硬件资源,因此建议在生产环境中设置. 查看Networking guide 来了解更多信息.
安全注意事项
用户和权限
查看vhosts, users, 和 证书章节.
Erlang Cookie
在Linux 和BSD 系统中, 有必要限制只有运行RabbitMQ和rabbitmqctl工具的用户才能访问Erlang cookie.
TLS
如果有可能,我们建议使用LS connections, 至少要加密通信. Peer验证(身份验证)也被推荐 . 开发和QA 环境可使用self-signed TLS certificates. 当RabbitMQ和所有程序运行在可信网络或隔离(使用像VMware NSX技术)环境中时,自签名证书可以应用于产品环境.
虽然RabbitMQ试图提供一个默认的安全TLS 配置 (如.SSLv3是禁用的), 我们推荐评估TLS 版本和密码套件. 请参考TLS guide 了解更多信息.
网络配置
产品环境需要调整网络配置.请参考 Networking Guide 来了解细节.
自动连接恢复
某些client libraries, 例如 Java.NET, 和 Ruby, 在网络失败后,支持自动连接恢复.如果client提供了这种功能,建议使用它来代替你自己的恢复机制.
集群化考虑
集群大小
当确定集群大小时,需要重点考虑下面的几个因素:
  • 希望的吞吐量
  • 希望的复制( mirrors的数目)
  • 数据局部性
因为客户端可以连接到任何节点,RabbitMQ可能需要进行集群间消息路由和内部操作。尝试使消费者和生产者连接到同一个节点,如果可能的话:这将减少节点间的流量。 使消费者连接到持有队列的master上(可使用HTTP API进行推断),也是有帮助的.当考虑到数据局部性时,总的集群吞吐量可以达到不平凡的量
对于大多数环境中,镜像超过一半的群集节点是足够的。建议使用一个奇数的节点(3,5,等等)的集群。
分区处理策略
在用于产品环境之前,挑选partition handling strategy 是很重要的. 有疑问时,使用theautoheal策略。
posted @ 2016-07-30 16:47 胡小军 阅读(1630) | 评论 (0)编辑 收藏
仅列出标题
共5页: 上一页 1 2 3 4 5 下一页