RabbitMQ介绍、安装和使用命令

阅读目录

1 RabbitMQ简介

       RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,官网地址:http://www.rabbitmq.com。RabbitMQ作为一个消息代理,主要负责接收、存储和转发消息,它提供了可靠的消息机制和灵活的消息路由,并支持消息集群和分布式部署,常用于应用解耦,耗时任务队列,流量削锋等场景。本系列文章将系统介绍RabbitMQ的工作机制,代码驱动和集群配置,本篇主要介绍RabbitMQ中一些基本概念,常用的RabbitMQ Control命令,最后写一个C#驱动的简单栗子。先看一下RabbitMQ的基本结构:

  上图是RabbitMQ的一个基本结构,生产者Producer和消费者Consumer都是RabbitMQ的客户端,Producer负责发送消息,Consumer负责消费消息。

接下来我们结合这张图来理解RabbitMQ的一些概念:

  Broker(Server):接受客户端连接,实现AMQP消息队列和路由功能的进程,我们可以把Broker叫做RabbitMQ服务器。

  Virtual Host:一个虚拟概念,一个Virtual Host里面可以有若干个Exchange和Queue,主要用于权限控制,隔离应用。如应用程序A使用VhostA,应用程序B使用VhostB,那么我们在VhostA中只存放应用程序A的exchange,queue和消息,应用程序A的用户只能访问VhostA,不能访问VhostB中的数据。

  Exchange:接受生产者发送的消息,并根据Binding规则将消息路由给服务器中的队列。ExchangeType决定了Exchange路由消息的行为,例如,在RabbitMQ中,ExchangeType有Direct、Fanout、Topic和Header四种,不同类型的Exchange路由规则是不一样的(这些以后会详细介绍)。

  Queue:消息队列,用于存储还未被消费者消费的消息,队列是先进先出的,默认情况下先存储的消息先被处理。

  Message:就是消息,由Header和Body组成,Header是由生产者添加的各种属性的集合,包括Message是否被持久化、由哪个Message Queue接受、优先级是多少等,Body是真正传输的数据,内容格式为byte[]。

  Connection:连接,对于RabbitMQ而言,其实就是一个位于客户端和Broker之间的TCP连接。

  Channel:信道,仅仅创建了客户端到Broker之间的连接Connection后,客户端还是不能发送消息的。需要在Connection的基础上创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令,一个Connection可以包含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是十分昂贵的。

2 RabbitMQ安装

  因为RabbitMQ是用erlang语言开发的,所以我们在安装RabbitMQ前必须要安装erlang支持。

1 Windows平台安装

1 安装erlang

  首先下载erlang,直接下载最新版本,当前下载的是 OTP 21.3 Windows 64-bit Binary File ,下载完成后一直下一步安装即可。

2 安装RabbitMQ

  下载Windows平台的RabbtMQ,当前下载的是 rabbitmq-server-3.7.14.exe ,下载完成后一直下一步安装即可。

3 安装Web管理插件

  打开RabbitMQ Command Prompt,执行命令 rabbitmq-plugins enable rabbitmq_management 即可完成Web监控插件的安装。 

  安装完成后,打开浏览器输入 http://127.0.0.1:15672/ 使用默认账号[ name:guest / password:guest ]登录后界面如下,使用这个UI插件我们可以轻松的查看RabbitMQ中的交换机(exchange),队列(queue)等内容,也可以对exchange,queue,用户等进行添加、修改、删除操作。

  到这一步Windows平台安装RabbitMQ完成了。 打开服务管理器,RabbitMQ已经在正常运行了,如下:

2 Centos安装RabbitMQ

1 安装RabbitMQ

  这里虚拟机系统为Centos7,采用的安装方式是yum安装,为了简单,这里直接使用官方提供的erlang和RabbitMQ-server的自动安装脚本(官方安装文档),逐行执行下边的代码就可以安装完成erlang和RabbitMQ。

复制代码

#安装socat
yum install socat

#安装erlang
  curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
  yum -y install erlang

#安装rabbitmq-server
  curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
  yum -y install rabbitmq-server

#启动rabbitmq服务
  systemctl start rabbitmq-server
#添加web管理插件
  rabbitmq-plugins enable rabbitmq_management

复制代码

补充:如果安装完成后,执行RabbitMQ执行命令特别慢,或者出现报错【rabbitmq unable to perform an operation on node  xxx@xxx】,解决方法:

  编辑hosts,执行命令 vim /etc/hosts ,添加本机IP(或者虚拟机IP)

  命令执行结束后,使用浏览器访问 http://127.0.0.1:15672/ 也会出现web管理界面。通过上边的安装步骤安装的RabbitMQ会生成Unit文件,所以我们可以使用Systemd管理RabbitMQ服务,以下是几条常用的命令:

复制代码

#启动RabbitMQ服务
  systemctl start rabbitmq-server
#停止RabbitMQ服务
  systemctl stop rabbitmq-server
#查看RabbitMQ运行状态
  systemctl status rabbitmq-server
#重启RabbitMQ服务
  systemctl restart rabbitmq-server

复制代码

2 RabbitMQ Control工具

  使用Web管理界面可以实现RabbitMQ的大部分常用功能,但是有些功能WebUI是做不到的,如:开启/关闭RabbitMQ应用程序和集群的管理等。RabbitMQ Control是RabbitMQ的命令行管理工具,可以调用所有的RabbitMQ内置功能,主命令是rabbitmqctl ,下边是一个查询用户列表的命令,注意需要切换到sbin目录下执行:

  为了方便的使用RabbitMQ Control工具,我们最好添加一个环境变量,Windows默认安装时在PATH中添加一条: C:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.14\sbin ,不是默认安装的话找到对应的安装目录添加PATH。按照上的安装方法,Centos可以直接使用RabbitMQ Control工具,不需要多余的配置。如果想详细了解RabbitMQ Control工具,可以参考RabbitMQ Control的官方文档

  这里总结了一些最常用到的RabbitMQ Controll命令,有兴趣的小伙伴可以试着运行一下这些命令,如在命令行工具中使用命令 rabbitmqctl add_user <username> <password>  添加一个新用户。

1 基本控制命令

  基本控制命令主要用于启动、停止应用程序、runtime等

复制代码

#停止rabbitmq和runtime
  rabbitmqctl shutdown
#停止erlang节点
  rabbitmqctl stop 
#启用rabbitmq 
  rabbitmqctl start_app 
#停止rabbitmq 
  rabbitmqctl stop_app
#查看状态
  rabbitmqctl status 
#查看环境
  rabbitmqctl environment
#rabbitmq恢复最初状态,内部的exchange和queue都清除
  rabbitmqctl reset 

复制代码

2 服务状态管理

  这些命令主要用于用于查看exchang、channel、binding、queue、consumers:

复制代码

#返回queue的信息
  list_queues [-p <vhostpath>] [<queueinfoitem> ...] 
#返回exchange的信息
  list_exchanges [-p <vhostpath>] [<exchangeinfoitem> ...] 
#返回绑定信息
  list_bindings [-p <vhostpath>] [<bindinginfoitem> ...]
 #返回链接信息
  list_connections [<connectioninfoitem> ...] 
#返回目前所有的channels
  list_channels [<channelinfoitem> ...]   
#返回consumers
  list_consumers [-p <vhostpath>] 

复制代码

3 用户管理命令

  这些命令主要用于添加、修改、删除用户及管理用户权限

复制代码

#在rabbitmq的内部数据库添加用户
  add_user <username> <password>  
#删除一个用户
  delete_user <username> 
#改变用户密码 
  change_password <username> <newpassword> 
#清除用户密码,禁止用户登录
  clear_password <username>
#设置用户tags,就是设置用户角色
  set_user_tags <username> <tag> 
# 查看用户列表
  list_users 
#创建一个vhost
  add_vhost <vhostpath> 
#删除一个vhosts
  delete_vhost <vhostpath>    
#列出vhosts
  list_vhosts [<vhostinfoitem> ...] 
#针对一个vhosts 给用户赋予相关权限
  set_permissions [-p <vhostpath>] <user> <conf> <write> <read> 
#清除一个用户对vhost的权限
  clear_permissions [-p <vhostpath>] <username> 
#列出所有用户对某一vhost的权限
  list_permissions [-p <vhostpath>]  
#列出某用户的访问权限
  list_user_permissions <username> 

复制代码

4 集群管理命令

复制代码

#clusternode表示node名称,--ram表示node以ram node加入集群中。默认node以disc node加入集群,在一个node加入cluster之前,必须先停止该node的rabbitmq应用,即先执行stop_app。
  join_cluster <clusternode> [--ram]   
#显示cluster中的所有node
  cluster_status 
#设置集群名字
  set_cluster_name <clustername>
#修改集群名字
  rename_cluster_node <oldname> <newname>
#改变一个cluster中node的模式,该节点在转换前必须先停止,不能把一个集群中唯一的disk node转化为ram node
  change_cluster_node_type <disc | ram>
#远程删除一个节点,删除前必须该节点必须先停止
  rabbitmqctl forget_cluster_node rabbit@rabbit1
#同步镜像队列
  sync_queue <queuename>
#取消同步队列
  cancel_sync_queue <queuename>  
#清空队列中所有消息
  purge_queue [-p vhost] <queuename>

复制代码

  这里列举的很多命令是现阶段用不到的,如集群控制相关的命令,这些命令的用法会在以后的章节中逐渐理解。

猜你喜欢

转载自blog.csdn.net/u014748504/article/details/108535431