运行和管理Rabbit
节点描述的是一个Erlang节点运行着一个Erlang应用程序。Erlang虚拟机的每个实例我们称之为节点。多个Erlang应用程序可以运行在同一个节点之上。节点之间可以进行本地通信。在RabbitMQ安装目录下找到./sbin目录,运行./rabbitmq-server。通常情况下可以在/var/log/rabbitmq/目录下找到名为rabbit@{hostname}.log的日志文件。rabbitmq-server同时启动了节点和应用程序,而rabbitmqctl stop会把节点和应用程序同时关闭。使用rabbitmqctl stop_app会只停止rabbitmq应用程序而不关闭erlang节点。Rabbitmq允许设置系统范围的可调参数并通过配置文件进行设置。该文件位于/etc/rabbitmq/rabbitmq.config。Rabbitnmq配置文件实际上是一个包含了嵌套哈希表的数组。每个erlang应用程序会有自己的哈希表来配置选项。mnesia指的是Mnesia数据库配置选项。rabbit指的是RabbitMQ特定的配置选项。每个选项都表达为{[option_name],[option_value]}。
RabbitMQ中的每个队列,交换器和绑定的元数据都保存到了Mnesia中。Mnesia是内建在Erlang的非SQL型数据库。Mnesia通过将RabbitMQ元数据首先写入到一个仅追加的日志文件以确保其完整性。然后在定期将日志内容转存到真实的Mnesia数据库文件中。
Mnesia的dump_log_write_threshold选项控制转储的频度。
tcp_listeners定义了Rabbitmq应该监听的非SSL加密通信的IP地址和端口。
Rabbit配置项
ssl_listeners定义了RabbitMQ应该监听的SSL加密通信的IP地址和端口。
ssl_options指定了SSL相关的选项,有效的选项有cacertifile,certfile,keyfile和fail_if_no_peer_cert。
vm_memory_high_watermark控制RabbitMQ允许消耗的内存。它以十进制的数值的形式明确了Rabbit允许使用的安装内存百分比。
msg_store_file_size_limit指定RabbitMQ垃圾收集存储内容之前。消息存储数据库的最大大小。
queue_index_max_journal_entries指定了在转储到消息存储数据库并提交前,消息存储日志里的最大条目收数。
RabbitMQ权限
RabbitMQ权限系统中的单个用户可以跨越多个vhost进行授权。
在RabbitMQ中,用户是访问控制的基本单元。针对一到多个vhost,其可以被赋予不同级别的访问权限,并使用标准的用户名/密码对来认证用户。
./rabbitmqctl add_user username password --添加用户
./rabbitmqctl delete_user username --删除用户
./rabbitmqctl list_users --查看所有用户
./rabbitmqctl change_password username newpassword --更新密码
Rabbitmq实现了一套访问控制列表(acl)风格的权限系统。
AMPQ命令 配置 写 读
exchange.declare exchange
exchange.delete exchange
queue.declare queue
queue.delete queue
queue.bind queue exchange
basic.publish queue
basic.get queue
basic.consume queue
queue.purge queue
每一条访问控制条目由4个部分组成:被授予访问权限的用户,权限控制应用的vhost,需要授予的读/写/配置权限的组合以及权限范围
./rabbitmqctl set_permissions -p vhostname username ".*" ".*" ".*" --赋予某个用户vhost的权限
./rabbitmqctl list_permissions -p username --列出用户的所有权限
./rabbitmqctl clear_permissions -p vhost username --清空vhost上username的所有权限
./rabbitmqctl list_queues (-p vhostname) --列出所有声明的队列
./rabbitmqctl list_queues name message consumers memory --列出队列的名称 消息数目 消费者数目和内存使用的情况
./rabbitmqctl list_queues name durable auto_delete --列出消息的名字,可持续性和是否自动删除
./rabbitmqctl list_exchanges --返回交换器名称和类型
./rabbitmqctl list_exchanges name type durable auto_delete
./rabbitmqctl list_bindings --绑定的详细信息:交换器名称,队列名称,路由键和参数
RabbitMQ的日志系统
在rabbitmq-server脚本显示:LOG_BASE=/var/log/rabbitmq。它会创建两个日志文件:RABBITMQ_NODENAME-sals.log和RABBITMQ_NODENAME.log。RABBITMQ_NODENAME指的是_rabbit@localhost_或就是rabbit,具体取决于配置系统。SASL(System Application Support Libraries,系统应用程序支持库)是库的集合。当RabbitMQ记录Erlang相关信息时,它会将日志写入rabbitsasl.log文件。
tail -f rabbit.log
rabbitmqctl会启动Erlang节点,并从那里使用Erlang分布式系统尝试连接RabbitMQ节点。要完成这项工作需要合适的Erlang cookie和合适的节点名称。Erlang节点通过交换作为秘密令牌的Erlang cookie以获得认证。连接到远程节点后,就可以执行命令,因此有必要确保该节点时可信的。Erlang将令牌存储在名为.erlang.cookie的文件。该文件通常位于用户的home目录下。
cat ~/.erlang.cookie --查看erlang.cookie
为了能让rabbitmqctl连接RabbitMQ节点,需要共享相同的cookie。若运行RabbitMQ和执行Rabbitmqctl命令是同一个用户,则不会有问题。若有多个用户时,他们需要共享cookie。
当启动Erlang节点时,可以给它两个互斥的节点名选项,name和sname(short name)。节点名可长可短。若用长名启动节点,则它会像rabbit@hostname.network.tld,若用短名,则像rabbit@hostname这样。
RabbitMQ使用Mnesia存储对俄,交换器,绑定等信息。RabbitMQ启动时第一件事就是启动Mnesia数据库。若Mnesia启动失败,则RabbitMQ也会失败。导致Mnesia启动失败的原因主要有两个:一个是MNESIA_BASE目录的权限问题。运行RabbitMQ服务器的用户需要对该文件夹的写权限;另一个问题是Mnesia读取表格失败。若主机名更改了,或是服务器运行在集群模式下,无法在启动的时候连接到其他节点,这些都会导致失败。Mnesia会基于机器的主机名创建数据库schema。若果列出MNESIA_BASE文件夹的内容,就会看到其中一个文件夹是rabbit@hostname。若网络重新配置的原因,主机名修改了,Mnesia就无法载入久的schema。同时不要用RabbitMQ使用rabbit这个单词作为节点名。若使用了Erlang sname选项更改了它,Mnesia又会遇到同样的问题。
erl -sname nodename --使用短名启动erlang节点
net_adm:names() --查看机器上还运行着哪些节点
当启动一个分布式Erlang节点时,它会用epmd(Erlang Port Mapper Daemon)进程进行注册,提供OS内核分配的地址和端口。之后当另一个Erlang节点启动时,它也会做同样的事情。最后,若想要连接第一个节点的话,它会查询epmd以获得节点地址。
net_adm:ping('rabbit@mrhyde') --尝试对rabbit@mrhyde节点的连接,若应答是pong,则表明连接是成功的,若应答是pang,则无法连接到该节点。
rpc:call('rabbit@mrhyde', erlang, system_info, [process_count]).106 -使用rpc:call,同时提供节点,模块,函数和参数作为入参,可以在远程rabbit上执行其他函数以获得不同的信息。
rpc:call('rabbit@mrhyde', mnesia, info,[]). --打印关于Mnesia的信息,如RabbitMQ创建的表哥,内存使用情况等
q() --执行q函数推出Erlang REPL
消息通信适用的主要领域之一是发后即忘的处理模式。匹配该模式的两种一般类型的任务是:
批处理(batch processing):针对大型数据集合的工作或者转换。这种类型的任务可以构建单一的任务请求或多个任务对数据集合的独立部分进行操作
通知(notifications):对发生事件的描述。内容可以是消息的日志,也可以是真实的报告通知给程序或是管理员
在每个AMQP消息头里有个字段叫作reply_to。消息的生产者可以通过该字段来确定队列名称,并监听队列等待应答。然后接受消息的RPV服务器检查reply_to字段,并创建包含应答内容的新的消息,并以队列名称作为路由键。所有的RPC客户端需要做的是声明临时的,排他的,匿名队列,并将该队列名称包含到RPC消息的reply_to头中,于是服务器端就知道应答消息该发往何处。
运行和管理Rabbit的更多相关文章
- (转载)运行主机管理在openvswitch之上
在这篇文章里介绍了如果运行主机管理在openvswitch之上,而不是单独配置一个物理网卡用于主机管理,并且所有的vm的流量还是通过openvswitch走的. Running Host Manage ...
- oracle数据库全然恢复和不全然恢复以及运行用户管理辈分恢复
比較全然恢复和不全然恢复: 一.全然恢复:将数据库恢复到当前最新状态,包含直至请求恢复时进行的全部已提交的数据更改 二.不全然恢复:将数据库恢复到请求恢复操作之前指定的过去时间点 一.全然恢复过程 以 ...
- 从命令行模式运行Windows管理工具。
从命令行模式运行Windows管理工具. 分类: Play Windows 2004-08-06 16:39 6076人阅读 评论(3) 收藏 举报 1.可以直接在开始-〉运行里面输入的管理工具: 文 ...
- Linux下RabbitMQ安装、运行与管理
Linux下RabbitMQ安装.运行与管理 安装erlang 安装参考官网 RabbitMQ的安装需要Erlang的基础环境,必须按照RabbitMQ Erlang版本要求进行安装. 关于Erlan ...
- RabbitMQ介绍3 - 运行和管理RabbitMQ
安装.官方介绍:http://www.rabbitmq.com/download.html.一般产品环境会部署到Linux环境,但做为简单尝试,可以部署到Windows上(这里是部署介绍:http:/ ...
- AgileEAS.NET SOA 中间件Web运行容器管理功能已全部开源,欢迎大家下载、使用、反馈
一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...
- 编译和运行dubbo-admin管理平台
下载 Github上下载最新的dubbo源码包并解压 修改ZooKeeper相关的配置 打开dubbo-admin/src/main/webapp/WEB-INF下的dubbo.p ...
- Docker学习笔记之运行和管理容器
0x00 概述 容器是基于容器技术所建立和运行的轻量级应用运行环境,它是 Docker 封装和管理应用程序或微服务的“集装箱”.在 Docker 中,容器算是最核心的部分了,掌握容器的操作也是 Doc ...
- [Docker6] Docker compose多容器运行与管理
六.Docker compose docker compose就是通过yml文件来定义和运行多个容器docker应用程序的工具,三步过程就能跑起一个compose: 定义应用程序的环境(yml中) 定 ...
随机推荐
- MapReduce- 数据的排序处理
MapReduce- 数据的排序处理 package com.huhu.day02; import java.io.DataInput; import java.io.DataOutput; impo ...
- -bash: /etc/init.d/nginx: /bin/bash^M: bad interpreter: No such file or directory
-bash: /etc/init.d/nginx: /bin/bash^M:bad interpreter: No such file or directory 这个使为了弄nginx自启的,然后在官 ...
- 更改pip源至国内镜像
更改pip源至国内镜像 经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样 ...
- .net mvc 列名 'Discriminator' 无效
环境:asp.net 4.0 + MVC 4 + Entity Framework 5异常:使用code first 碰到错误:列名 'Discriminator' 无效.这是一个很少见的错误,搜索了 ...
- leetcode Most Common Word——就是在考察自己实现split
819. Most Common Word Given a paragraph and a list of banned words, return the most frequent word th ...
- Dagger2不自动生成daggerXXXcomponent
在Fragment里面初始化dagger2创建对象时,不自动生成daggerXXXcomponent. 百思不得其解,后来发现是import android.app.Fragment;所以不自动生成. ...
- Redis在CentOS7中的启动警告
CentOS7安装Redis,启动时会出现如下图3个警告. 问题1:WARNING: The TCP backlog setting of 511 cannot be enforced because ...
- API设计和命名
1.前言 对于前端开发而言,肯定会和API打交道,大家也都会想过怎么设计自己的API.优秀的 API 之于代码,就如良好内涵对于每个人.好的 API 不但利于使用者理解,开发时也会事半功倍,后期维护更 ...
- 转 Deep Learning for NLP 文章列举
原文链接:http://www.xperseverance.net/blogs/2013/07/2124/ 大部分文章来自: http://www.socher.org/ http://deepl ...
- Win10系列:VC++ Direct3D模板介绍3
(4)Render函数 默认定义在CubeRenderer.cpp源文件中的Render函数用于绘制立体图形,此函数的实现代码如下所示: void CubeRenderer::Render() { ...