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.访问登录:
上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
management可以做的任何事外加:
列出所有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
补充:management管理端界面也可以进行上面的添加用户,添加vhost等操作
补充:rabbitmq 支持的命令如下
Usage: rabbitmqctl [-n <node>] [-t <timeout>] [-q] <command> [<command options>] Options: -n node -q -t timeout Default node is "rabbit@server", where server is the local host. On a host named "server.example.com", the node name of the RabbitMQ Erlang node will usually be rabbit@server (unless RABBITMQ_NODENAME has been set to some non-default value at broker startup time). The output of hostname -s is usually the correct suffix to use after the "@" sign. See rabbitmq-server(1) for details of configuring the RabbitMQ broker. Quiet output mode is selected with the "-q" flag. Informational messages are suppressed when quiet mode is in effect. Operation timeout in seconds. Only applicable to "list" commands. Default is "infinity". Commands: stop [<pid_file>] shutdown stop_app start_app wait <pid_file> reset force_reset rotate_logs <suffix> hipe_compile <directory> join_cluster <clusternode> [--ram] cluster_status change_cluster_node_type disc | ram forget_cluster_node [--offline] rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2 ...] update_cluster_nodes clusternode force_boot sync_queue [-p <vhost>] queue cancel_sync_queue [-p <vhost>] queue purge_queue [-p <vhost>] queue set_cluster_name name add_user <username> <password> delete_user <username> change_password <username> <newpassword> clear_password <username> authenticate_user <username> <password> set_user_tags <username> <tag> ... list_users add_vhost <vhost> delete_vhost <vhost> list_vhosts [<vhostinfoitem> ...] set_permissions [-p <vhost>] <user> <conf> <write> <read> clear_permissions [-p <vhost>] <username> list_permissions [-p <vhost>] list_user_permissions <username> set_parameter [-p <vhost>] <component_name> <name> <value> clear_parameter [-p <vhost>] <component_name> <key> list_parameters [-p <vhost>] set_global_parameter <name> <value> clear_global_parameter <name> list_global_parameters set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition> clear_policy [-p <vhost>] <name> list_policies [-p <vhost>] list_queues [-p <vhost>] [--offline|--online|--local] [<queueinfoitem> ...] list_exchanges [-p <vhost>] [<exchangeinfoitem> ...] list_bindings [-p <vhost>] [<bindinginfoitem> ...] list_connections [<connectioninfoitem> ...] list_channels [<channelinfoitem> ...] list_consumers [-p <vhost>] status node_health_check environment report eval <expr> close_connection <connectionpid> <explanation> trace_on [-p <vhost>] trace_off [-p <vhost>] set_vm_memory_high_watermark <fraction> set_vm_memory_high_watermark absolute <memory_limit> set_disk_free_limit <disk_limit> set_disk_free_limit mem_relative <fraction> encode [--decode] [<value>] [<passphrase>] [--list-ciphers] [--list-hashes] [--cipher <cipher>] [--hash <hash>] [--iterations <iterations>] decode [<value>] [<passphrase>][--cipher <cipher>] [--hash <hash>] [--iterations <iterations>] list_hashes list_ciphers <vhostinfoitem> must be a member of the list [name, tracing]. The list_queues, list_exchanges and list_bindings commands accept an optional virtual host parameter for which to display results. The default value is "/".