天天看点

RabbitMQ简介以及安装

1.简介

  rabbitMQ是一种基于AMQP协议的消息中间件,用Erlang语言开发。AMQP(Advanced message queuing protocol)是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端、中间件等不同产品,不同开发语言等条件的限制。

  rabbitMQ最初起源于金融系统,用在分布式系统中存储转发消息,在易用性、扩展性、高可用等方面表现不俗,具体特点包括:

1.可靠性:使用一些机制保证可靠性,如持久化、传输确认、发布确认。

2.灵活的路由:在消息进入队列之前,通过Exchange交换机来路由消息。对于典型的路由功能,RabbitMQ已经提供了一些内置的Exchange来实现。针对更复杂的路由功能,可以将多个Exchange绑定在一起或开发自己的Exchange。

3.消息集群:多个RabbitMQ组成一个集群,形成一个逻辑的broker。

4.高可用:队列可以在集群中的机器上进行镜像,使得在部分节点出问题的情况下队列下仍然可用。

5.多种协议:支持多种消息队列协议,比如STOMP、MQTT等。

6.多语言客户端:支持几乎所有常用语言,比如java、rubu、.NET等。

7.管理界面:提供了一个易用的用户界面,使得用户可以监控和管理消息的broker

8.跟踪机制:如果消息异常,rabbitMQ提供了消息跟踪机制,使用者可以找出发生了什么。

2.RabbitMQ安装

erlang官网:https://www.erlang.com/ 

rabbitmq官网:https://www.rabbitmq.com/

  采用windows环境的docker安装。也可以用linux环境的docker安装。如果是手动安装的话需要安装erlang环境和rabbitmq。

1.查看docker版本

C:\Users\liqiang>docker -v
Docker version 18.01.0-ce, build 03596f51b1      

2.docker安装rabbitmq

docker pull hub.c.163.com/library/rabbitmq:management      

3.运行镜像

(1)默认guest 用户,密码也是 guest

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672  hub.c.163.com/library/rabbitmq:management      

(2)设置用户名和密码 zs/111222

docker run -d --hostname my-rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=zs -e RABBITMQ_DEFAULT_PASS=111222 -p 15672:15672 hub.c.163.com/library/rabbitmq:management      

补充:一般也需要暴露5672端口,5672是客户端连接操作的端口,15672是management暴露的端口

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672  hub.c.163.com/library/rabbitmq:management      

4.访问登录:

RabbitMQ简介以及安装

  上management控制台可以看到CPU相关信息。后期主要关注的tab是Exchanges交换机和Queues队列。Admin用户管理用户,可以添加和删除用户以及对用户赋权。

 由于我是windows虚拟的docker机器,所有虚拟机地址,可以通过如下命令查看:

C:\Users\liqiang>docker-machine ip default
192.168.99.100      

3.rabbitmq简单使用

下面的命令都是基于rabbit命令执行,需要先进入docker容器:

(1)docker ps -a  查看容器ID为:d65feaa67533

(2)进入容器

$ docker exec -it d6 /bin/bash      

1.rabbitmq插件管理-management插件实际是15672端口看到的界面

rabbitmq-plugins用于管理插件,用法如下:

root@my-rabbit:/# rabbitmq-plugins
Error: could not recognise command
Usage:
rabbitmq-plugins [-n <node>] <command> [<command options>]

Commands:
    list [-v] [-m] [-E] [-e] [<pattern>]
    enable [--offline] [--online] <plugin> ...
    disable [--offline] [--online] <plugin> ...
    set [--offline] [--online] <plugin> ...      

(1) 查看插件

root@my-rabbit:/# rabbitmq-plugins list | grep management
[  ] rabbitmq_federation_management    3.6.11
[E*] rabbitmq_management               3.6.11
[e*] rabbitmq_management_agent         3.6.11
[  ] rabbitmq_management_visualiser    3.6.11
[  ] rabbitmq_shovel_management        3.6.11      

(2)禁用插件rabbitmq_management(这个插件实际负责web界面展示)

root@my-rabbit:/# rabbitmq-plugins disable rabbitmq_management
The following plugins have been disabled:
  amqp_client
  cowlib
  cowboy
  rabbitmq_web_dispatch
  rabbitmq_management_agent
  rabbitmq_management

Applying plugin configuration to rabbit@my-rabbit... stopped 6 plugins.      

  禁用之后访问15672端口会访问不到。

(3)启用插件rabbitmq_management

rabbitmq-plugins enable rabbitmq_management      

  启用之后又可以访问15672端口。

2.用户管理

1.添加用户

root@my-rabbit:/# rabbitmqctl add_user root 123456
Creating user "root"      

2.修改密码

root@my-rabbit:/# rabbitmqctl change_password root 111222
Changing password for user "root"      

3.修改角色:

语法如下:

rabbitmqctl set_user_tags {username} {tag}      

例如:

root@my-rabbit:/# rabbitmqctl set_user_tags root administrator monitoring
Setting tags for user "root" to [administrator,monitoring]      

rabbitmq的角色包括:none、management、policymaker、monitoring、administrator

(1)none: 不能访问 management plugin

(2)management:

用户可以通过AMQP做的任何事外加:

  列出自己可以通过AMQP登入的virtual hosts  

  查看自己的virtual hosts中的queues, exchanges 和 bindings

  查看和关闭自己的channels 和 connections

  查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。

(3)policymaker 

management可以做的任何事外加:

  查看、创建和删除自己的virtual hosts所属的policies和parameters

(4)monitoring  

  列出所有virtual hosts,包括他们不能登录的virtual hosts

  查看其他用户的connections和channels

  查看节点级别的数据如clustering和memory使用情况

  查看真正的关于所有virtual hosts的全局的统计信息

(5)administrator   

policymaker和monitoring可以做的任何事外加:

  创建和删除virtual hosts

  查看、创建和删除users

  查看创建和删除permissions

  关闭其他用户的connections

4.删除用户

root@my-rabbit:/# rabbitmqctl delete_user root
Deleting user "root"      

3.rabbitMQ权限管理

  用户权限指的是用户对exchange,queue的操作权限,包括配置权限,读写权限。配置权限会影响到exchange,queue的声明和删除。读写权限影响到从queue里取消息,向exchange发送消息以及queue和exchange的绑定(bind)操作。

1.授权命令

rabbitmqctl  set_permissions  [-p  VHostPath] {User}  {ConfP}  {WriteP}  {ReadP}      

-p VHostPath:用于指定用户一个资源的命名空间,例如/表示根路径命名空间。可以理解为文件系统的路径。

user:需要赋权的用户

confP:一个正则表达式match哪些配置资源能被该用户配置

writeP:一个正则表达式match哪些配置资源能被该用户写

readP:一个正则表达式match哪些配置资源能被该用户读

rabbitmqctl  set_permissions  -p / root '.*' '.*' '.*'      

2.查看用户权限:

rabbitmqctl  list_permissions  [vhostpath]      

(1)查看根路径下所有用户权限

rabbitmqctl  list_permissions      

(2)查看vhost为abc的所有用户权限

rabbitmqctl  list_permissions -p abc      

3.查看用户的权限

rabbitmqctl  list_user_permissions zs      

4. vhost管理

vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的队列、绑定、交换器和权限控制;

vhost通过在各个实例间提供逻辑上分离,允许你为不同应用程序安全保密地运行数据;

vhost是AMQP概念的基础,必须在连接时进行指定,RabbitMQ包含了默认vhost:“/”;

当在RabbitMQ中创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派vhost内的队列、交换器和绑定,vhost之间是绝对隔离的。

root@my-rabbit:/# rabbitmqctl list_vhosts  #查看vhost
Listing vhosts
/
root@my-rabbit:/# rabbitmqctl add_vhost abc  #添加vhost
Creating vhost "abc"
root@my-rabbit:/# rabbitmqctl list_vhosts
Listing vhosts
abc
/
root@my-rabbit:/# rabbitmqctl delete_vhost abc  #删除vhost
Deleting vhost "abc"      

 补充:今天我在windows的docker环境下docker info的时候报错

error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.35/info: open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, the docker client must be run elevated to connect. This error may also indicate that the docker daemon is not running.      

解决办法:

(1)在git bash中执行:

$ docker-machine env default
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\liqiang\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"
# Run this command to configure your shell:
# eval $("E:\docker\Docker Toolbox\docker-machine.exe" env default)      

之后执行上面的命令即可:

export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="C:\Users\liqiang\.docker\machine\machines\default"
export DOCKER_MACHINE_NAME="default"
export COMPOSE_CONVERT_WINDOWS_PATHS="true"      

(2)如果cmd窗口报错,执行:

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.99.100:2376
SET DOCKER_CERT_PATH=C:\Users\liqiang\.docker\machine\machines\default
SET DOCKER_MACHINE_NAME=default
SET COMPOSE_CONVERT_WINDOWS_PATHS=true      

【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】