初识rabbitmq以及咱们线上业务环境的mq服务方式:html
交换器的4种类型:
direct 根据路由键投递消息
fanout 广播方式,绑定到同一个exchange上的queue都能收到一样的msg。不须要路由键,若是接受到消息的Exchange没有与任何Queue绑定,则消息会被抛弃
topic 根据queue定义的topic名称来接收相应的msg
header (不多用,直接忽略它)java
运维 09:18:31
faout就是广播,咱们如今使用的就是faout
运维 09:19:03
faout没有routing key绑定确实简单
运维 09:19:37
可是咱们的业务的调用连是一条接一条的为啥不用topic,
运维 09:20:07
这样srm队列获取wbms的队列消息不是更快么
架构师 09:20:58
http://www.javashuo.com/article/p-dzklodyt-bw.html
架构师 09:21:16
快不是咱们的系统须要关注的
架构师 09:23:04
咱们的系统每秒500的消息量顶天了,不要拿来跟互联网公司高峰期每秒几百万的量作对比,业务彻底不一样,不必参考他们的作法
架构师 09:24:13
再说了若是当初把系统的高性能需求摆在第一位也不可能选型rabbitmq的
架构师 09:26:11
https://www.cnblogs.com/LiangSW/p/6195836.html
架构师 09:26:43
要多分析业务而不是技术node
咱们线上的消息不多,一秒也就几票数据,二十票每秒都算高的
咱们线上业务的mq的queue之间,没前后顺序,相互间都有互传数据,
数据库相互都独立的,为了冗余数据一定要作一些回传
目前使用的是faout,一个功能一个echange,一般Echange 与queue的名字相同c++
rabbitmq的事务机制和确认机制
https://blog.csdn.net/u013256816/article/details/55515234从开发角度理解git
消息确认机制:
RabbitMQ提供了transaction、confirm两种消息确认机制。
transaction即事务机制,手动提交和回滚;
confirm机制提供了Confirmlistener和waitForConfirms两种方式。
confirm机制效率明显会高于transaction机制,但transaction的优点在于强一致性。若是没有特别的要求,建议使用conrim机制。github
Confirmlistener从代码或者抓包能够看待咱们线上业务使用的是confirm
事务机制适用的场景极少的,要么涉及钱,要么有多机房的状况,或者网络质量不好才考虑事务确认web
一、从实验来看,消息的确认机制只是确认publisher发送消息到broker,由broker进行应答,不能确认消息是否有效消费。
二、而为了确认消息是否被发送给queue,应该在发送消息中启用参数mandatory=true,使用ReturnListener接收未被发送成功的消息。
三、接下来就须要确认消息是否被有效消费。publisher端目前并无提供监听事件,但提供了应答机制来保证消息被成功消费,应答方式:shell
basicAck:成功消费,消息从队列中删除数据库
basicNack:requeue=true,消息从新进入队列,false被删除segmentfault
basicReject:等同于basicNack
basicRecover:消息重入队列,requeue=true,发送给新的consumer,false发送给相同的consumer
发送方确认机制:
客户端发送请求(消息)时,在消息的属性(Message Properties,在AMQP协议中定义了14种properties,这些属性会随着消息一块儿发送)中设置两个值replyTo(一个Queue名称,用于告诉服务器处理完成后将通知个人消息发送到这个Queue中)和correlationId(这次请求的标识号,服务器处理完成后须要将此属性返还,客户端将根据这个id了解哪条请求被成功执行了或执行失败)。服务器端收到消息处理完后,将生成一条应答消息到replyTo指定的Queue,同时带上correlationId属性。客户端以前已订阅replyTo指定的Queue,从中收到服务器的应答消息后,根据其中的correlationId属性分析哪条请求被执行了,根据执行结果进行后续业务处理。
erlang节点:
erlang相似JVM,erlang节点能自动尝试启动所在节点的应用程序。
1、安装erlang、socat、mq
软件包地址:
http://www.rabbitmq.com/releases/
https://github.com/rabbitmq/rabbitmq-server/releases
安装erlang所需的依赖包
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
安装erlang的rpm包
rpm -ivh erlang-18.1-1.el7.centos.x86_64.rpm
安装rabbit-mqserver的rpm包
[root@i-ds3e3eg6 ~]# rpm -ivh rabbitmq-server-3.6.10-1.el6.noarch.rpm
warning: rabbitmq-server-3.6.10-1.el6.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
error: Failed dependencies:
socat is needed by rabbitmq-server-3.6.10-1.el6.noarch
处理报错
yum -y install socat 或者 yum install rabbitmq-server-3.6.10-1.el6.noarch.rpm
[root@i-idzmbvhr ~]# rpm -ivh rabbitmq-server-3.6.10-1.el6.noarch.rpm
warning: rabbitmq-server-3.6.10-1.el6.noarch.rpm: Header V4 RSA/SHA512 Signature, key ID 6026dfca: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:rabbitmq-server-3.6.10-1.el6 ################################# [100%]
验证erlang是否安装成功:
root@i-ds3e3eg6 ~]# erl
Erlang/OTP 18 [erts-7.1] [source] [64-bit] [smp:2:2] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V7.1 (abort with ^G)
1> quit
1>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
重复安装rpm
[root@prod-wuliu-rabbitmq-42 ~]# rpm -qa | grep rabbitmq-server
rabbitmq-server-3.6.10-1.el6.noarch
[root@prod-wuliu-rabbitmq-42 ~]# rpm -e rabbitmq-server-3.6.10-1.el6.noarch
Stopping rabbitmq-server (via systemctl): [ OK ]
[root@prod-wuliu-rabbitmq-42 ~]#
2、修改host配置
cat /etc/hosts
172.16.42.13 prod-wuliu-rabbitmq-42-13
172.16.42.14 prod-wuliu-rabbitmq-42-14
3、设置 Erlang Cookie
Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie。这里将 node1 的该文件复制到 node二、node3,因为这个文件权限是 400,因此须要先修改 node二、node3 中的该文件权限为 777:
而后将 node1 中的该文件拷贝到 node二、node3,最后将权限和所属用户/组修改回来:
4、使用 -detached 参数运行各节点
启动方式
/ect/init.d/rabbit-server start
rabbitmq-server start &
rabbitmq-server -detached 推荐使用
定制rabbitmq的启动方式https://www.cnblogs.com/ylsforever/p/6600925.html
启动rabbitmq启动:
查看服务端口是否正常启动:
[root@i-ds3e3eg6 ~]# lsof -i:5672
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 20425 rabbitmq 53u IPv6 38571 0t0 TCP *:amqp (LISTEN)
[root@i-ds3e3eg6 ~]#
5673和5674分别为rabbitmq-node1和rabbitmq-node2的client链接端口;
15673和15674分别为rabbitmq-node1和rabbitmq-node2后台监控系统访问端口;
5、建立集群:
启动节点
BABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit rabbitmq-server -detached(默认端口:5672,默认节点名称:rabbit)
中止RabbitMQ应用程序:rabbitmqctl -n rabbit_1@hostname stop_app
清空元数据,重置节点状态:rabbitmqctl -n rabbit_1@hostname reset
加入到第一个集群节点:rabbitmqctl -n rabbit_1@hostname cluster rabbit@hostname rabbit_1@hostname ,-n参数:在指定节点上执行命令而非默认节点;cluster后面的参数:指定集群中的磁盘节点。
启动RabbitMQ应用程序:rabbitmqctl -n rabbit_1@hostname start_app
查看集群:rabbitmqctl cluster_status
将prod-wuliu-rabbitmq-42-13 和 prod-wuliu-rabbitmq-42-14两个节点组成集群:
rabbit1为主节点,另外两个为从节点搭建,主节点不用动,只在两个从节点运行以下命令,我这里只举一个节点(rabbit2)的例子,rabbit3执行相同的命令
[root@rabbit2 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rabbit2 ...
[root@rabbit2 rabbitmq]# rabbitmqctl reset
Resetting node rabbit@rabbit2 ...
[root@rabbit2 rabbitmq]# rabbitmqctl join_cluster rabbit@prod-wuliu-rabbitmq-42-13
Clustering node rabbit@rabbit2 with rabbit@rabbit1 ...
[root@rabbit2 rabbitmq]# rabbitmqctl start_app
Starting node rabbit@rabbit2 ...
此时 13 与 14也会自动创建链接;
若是要使用内存节点,则可使用
node2 # rabbitmqctl join_cluster --ram rabbit@node1 加入集群。
集群配置好后,能够在 RabbitMQ 任意节点上执行 rabbitmqctl cluster_status 来查看是否集群配置成功。
设置内存节点
rabbitmq要求集群中至少一个磁盘节点【为了提升性能,不须要所有节点都是disc的节点】
,因此咱们能够启动部分节点为RAM模式
当节点加入或者离开集群时,他们必须通知到至少一个磁盘节点。
若是集群内就1个磁盘节点,其他都是内存节点。若是这个惟一的一个磁盘节点宕机了,那么集群仍是能够路由消息的。可是这个时候不支持以下操做:
建立队列、建立交换器、建立绑定、添加用户、更改权限、添加或删除集群节点
其中–ram指的是做为内存节点,要是想作为磁盘节点的话,就不用加–ram这个参数了
加入内存节点集群
node2 # rabbitmqctl join_cluster --ram rabbit@node1
只要在节点列表里包含了自己,它就成为一个磁盘节点。
在RabbitMQ集群里,必须至少有一个磁盘节点存在。
更改节点属性
node2 $ rabbitmqctl stop_app # 中止rabbitmq服务
node2 $ rabbitmqctl change_cluster_node_type ram # 更改节点为内存节点
Turning rabbit@node2 into a ram node
node2 $ rabbitmqctl change_cluster_node_type disc # 更改节点为磁盘节点
Turning rabbit@node2 into a disc node
node2 $ rabbitmqctl start_app # 开启rabbitmq服务
查看单个mq的服务状态:
oot@prod-wuliu-rabbitmq-42-14 ~]# rabbitmqctl status
或者
rabbitmqctl node_health_check
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl node_health_check
Timeout: 70.0 seconds
Checking health of node 'rabbit@prod-wuliu-rabbitmq-42-13'
Health check passed
查看集群的服务状态:
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl cluster_status
Cluster status of node 'rabbit@prod-wuliu-rabbitmq-42-13' #第一行是集群中的节点成员,disc表示这些都是磁盘节点br/>[{nodes,[{disc,['rabbit@prod-wuliu-rabbitmq-42-13',#第二行是正在运行的节点成员
'rabbit@prod-wuliu-rabbitmq-42-14']}]},br/>{running_nodes,['rabbit@prod-wuliu-rabbitmq-42-14',
'rabbit@prod-wuliu-rabbitmq-42-13']},br/>{cluster_name,<<"rabbit@prod-wuliu-rabbitmq-42-14">>},
{partitions,[]},br/>{alarms,[{'rabbit@prod-wuliu-rabbitmq-42-14',[]},
{'rabbit@prod-wuliu-rabbitmq-42-13',[]}]}]
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl add_user admin Aa@admin
Creating user "admin"
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_user_tags admin administrator
Setting tags for user "admin" to [administrator]
查看mq的默认帐户:
[root@prod-rabbitmq-42 ~]# rabbitmqctl list_users
Listing users
guest [administrator]
启用管理插件:
默认端口 15672
##默认帐号/密码 guest/guest 不支持远程IP访问,只支持localhost访问
##建立帐号test;密码123456
#./rabbitmqctl add_user test 123456
##设置管理员权限
#./rabbitmqctl set_user_tags test administrator
##支持远程IP访问
#./rabbitmqctl set_permissions -p "/" test "." "." "."
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_permissions -p "/" admin "." "." "."
Setting permissions for user "admin" in vhost "/"
[root@prod-rabbitmq-42 ~]# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@prod-rabbitmq-42... started 6 plugins.
[root@prod-rabbitmq-42 ~]# lsof -i:15672
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
beam.smp 5639 rabbitmq 54u IPv4 20106 0t0 TCP *:15672 (LISTEN)
[root@prod-rabbitmq-42 ~]#
能够经过远程访问:
http://[IP]:15672
上面配置RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些能够复制到集群里的任何一个节点,
可是队列内容不会复制,虽然该模式解决一部分节点压力,但队列节点宕机直接致使该队列没法使用,只能等待重启,因此要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每一个节点,须要建立镜像队列
6、设置镜像队列策略
镜像队列
RabbitMQ 的 Cluster 集群模式通常分为两种,普通模式和镜像模式。
普通模式:默认的集群模式,以两个节点(rabbit0一、rabbit02)为例来进行说明。对于 Queue 来讲,消息实体只存在于其中一个节点 rabbit01(或者 rabbit02),rabbit01 和 rabbit02 两个节点仅有相同的元数据,即队列的结构。当消息进入 rabbit01 节点的 Queue 后,consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit0一、rabbit02 间进行消息传输,把 A 中的消息实体取出并通过 B 发送给 consumer。因此 consumer 应尽可能链接每个节点,从中取消息。即对于同一个逻辑队列,要在多个节点创建物理 Queue。不然不管 consumer 连 rabbit01 或 rabbit02,出口总在 rabbit01,会产生瓶颈。当 rabbit01 节点故障后,rabbit02 节点没法取到 rabbit01 节点中还未消费的消息实体。若是作了消息持久化,那么得等 rabbit01 节点恢复,而后才可被消费;若是没有持久化的话,就会产生消息丢失的现象。
镜像模式:将须要消费的队列变为镜像队列,存在于多个节点,这样就能够实现 RabbitMQ 的 HA 高可用性。做用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在 consumer 消费数据时临时读取。缺点就是,集群内部的同步通信会占用大量的网络带宽。
镜像队列实现了 RabbitMQ 的高可用性(HA),具体的实现策略以下所示:
ha-mode ha-params 功能
all 空 镜像队列将会在整个集群中复制。当一个新的节点加入后,也会在这 个节点上复制一份。
exactly count 镜像队列将会在集群上复制 count 份。若是集群数量少于 count 时候,队列会复制到全部节点上。若是大于 Count 集群,有一个节点 crash 后,新进入节点也不会作新的镜像。
nodes node name 镜像队列会在 node name 中复制。若是这个名称不是集群中的一个,这不会触发错误。若是在这个 node list 中没有一个节点在线,那么这个 queue 会被声明在 client 链接的节点。
镜像队列概念
镜像队列能够同步queue和message,当主queue挂掉,从queue中会有一个变为主queue来接替工做。
镜像队列是基于普通的集群模式的,因此你仍是得先配置普通集群,而后才能设置镜像队列。
镜像队列设置后,会分一个主节点和多个从节点,若是主节点宕机,从节点会有一个选为主节点,原先的主节点起来后会变为从节点。
queue和message虽然会存在全部镜像队列中,但客户端读取时不论物理面链接的主节点仍是从节点,都是从主节点读取数据,而后主节点再将queue和message的状态同步给从节点,所以多个客户端链接不一样的镜像队列不会产生同一message被屡次接受的状况。
设置镜像队列策略
在普通集群的中任意节点启用策略,策略会自动同步到集群节点
命令格式
set_policy [-p vhostpath] {name} {pattern} {definition} [priority]
在任意一个节点上执行
[root@node1 ~]# rabbitmqctl set_policy -p / ha-allqueue "^message" '{"ha-mode":"all"}'
Setting policy "ha-allqueue" for pattern "^message" to "{\"ha-mode\":\"all\"}" with priority "0"
注意:"^message" 这个规则要根据本身修改,这个是指同步"message"开头的队列名称,配置时使用的应用于全部队列,因此表达式为"^"
集群重启
集群重启时,最后一个挂掉的节点应该第一个重启,若是因特殊缘由(好比同时断电),而不知道哪一个节点最后一个挂掉。可用如下方法重启:
先在一个节点上执行
$ rabbitmqctl force_boot
$ service rabbitmq-server start
在其余节点上执行
$ service rabbitmq-server start
查看cluster状态是否正常(要在全部节点上查询)。
$ rabbitmqctl cluster_status
镜像队列节点宕机的状况:
若是镜像队列丢失了一个从节点,则对任何消费者都不会有影响。
主节点宕机,集群内部会从新选主。消费者须要从新附加到主队列。
配置镜像队列:
在任意一个节点上执行:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' -p /
这个命令会将/ 这个vhost的全部队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。
rabbitmqctl add_vhost vh4
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' -p vh4
这个命令会将vh4 这个vhost的全部队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一致。
至此,RabbitMQ 高可用集群就已经搭建好了,最后一个步骤就是搭建均衡器
虚拟主机vhost:
每一个vhost至关于一个mini的rabbitmq服务器,有独立的权限控制机制。不一样的vhost能够存在同名的交换器和队列名。
在rabbitmq中,权限控制是以vhost为单位的。
rabbitmqctl [add_vhost|delete_vhost] vhost1 便可添加/删除一个名为vhost1的虚拟主机
设置vhost,和user,这里设计的是一个项目一个vhost,一个项目用户
添加项目用户后,把项目用户的vhost受权给管理员
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_permissions -p wuliu_vhost_qianlima admin "." "." "."
Setting permissions for user "admin" in vhost "wuliu_vhost_qianlima"
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_permissions -p wuliu_vhost_transport admin "." "." "."
Setting permissions for user "admin" in vhost "wuliu_vhost_transport"
给vhost设置policy
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' -p wuliu_vhost_qianlima
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"
[root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' -p wuliu_vhost_transport
Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0"
[root@prod-wuliu-rabbitmq-42-13 ~]#
建立virtual host 虚拟主机
查看vhosts:rabbitmqctl list_vhosts
建立vhost:rabbitmqctl add_vhost [vhost_name]
删除vhost:rabbitmqctl delete_vhost [vhost_name]
列出Rabbit服务器上的vhost:rabbitmqctl list_vhosts
查看队列bbitmqctl list_queues
查看exchange rabbitmqctl list_exchanges
查看bangding rabbitmqctl list_bindings
vhost
rabbitmqctl set_policy ha-all "^(?!amq.).*" '{"ha-sync-mode":"automatic"}' -p wuliu_vhost_qianlima
清理错误的policy
vhost:wuliu_vhost_qianlima name:
root@prod-wuliu-rabbitmq-42-13 ~]# rabbitmqctl clear_policy -p wuliu_vhost_qianlima wuliu_vhost_qianlima
Clearing policy "wuliu_vhost_qianlima"
咱们经过 rabbitmqctl add_vhost命令新建一个virtual host : rabbitmqctl add_vhost test
咱们经过 rabbitmqctl list_vhosts命令看看如今系统有几个vhost了。能够看到有两个,
一个是系统默认的 '/', 还有一个就是咱们新建的 test_host。
可是到这里是不够的,咱们只是声明了一个vhost,咱们还要给它分配访问权限。
rabbitmqctl set_permissions -p test_host test "test-""." ".*",
如此用户名为test的用户就能够访问vitrual host为test_host的资源了,而且具有读写的权限。
// 使用户user1具备vhost1这个virtual host中全部资源的配置、写、读权限以便管理其中的资源
rabbitmqctl set_permissions -p vhost1 user1 '.' '.' '.*'
// 查看权限
rabbitmqctl list_user_permissions user1
rabbitmqctl list_permissions -p vhost1
// 清除权限
rabbitmqctl clear_permissions [-p VHostPath] User
RabbitMQ用户角色及权限控制
官方文档:
http://www.rabbitmq.com/rabbitmqctl.8.html
http://www.ywnds.com/?p=5388
add_user <username> <password>
delete_user <username>
change_password <username> <newpassword>
clear_password <username>
set_user_tags <username> <tag> ...
list_users
add_vhost <vhostpath>
delete_vhost <vhostpath>
list_vhosts [<vhostinfoitem> ...]
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
clear_permissions [-p <vhostpath>] <username>
list_permissions [-p <vhostpath>]
list_user_permissions <username>
set_parameter [-p <vhostpath>] <component_name> <name> <value>
clear_parameter [-p <vhostpath>] <component_name> <key>
list_parameters [-p <vhostpath>]
add_user <username> <password>
delete_user <username>
change_password <username> <newpassword>
clear_password <username>
set_user_tags <username> <tag> ...
list_users
add_vhost <vhostpath>
delete_vhost <vhostpath>
list_vhosts [<vhostinfoitem> ...]
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
clear_permissions [-p <vhostpath>] <username>
list_permissions [-p <vhostpath>]
list_user_permissions <username>
set_parameter [-p <vhostpath>] <component_name> <name> <value>
clear_parameter [-p <vhostpath>] <component_name> <key>
list_parameters [-p <vhostpath>]
RabbitMQ的用户角色分类:
none、management、policymaker、monitoring、administrator
RabbitMQ各种角色描述:
none
不能访问 management plugin
management
用户能够经过AMQP作的任何事外加:
列出本身能够经过AMQP登入的virtual hosts
查看本身的virtual hosts中的queues, exchanges 和 bindings
查看和关闭本身的channels 和 connections
查看有关本身的virtual hosts的“全局”的统计信息,包含其余用户在这些virtual hosts中的活动。
policymaker
management能够作的任何事外加:
查看、建立和删除本身的virtual hosts所属的policies和parameters
monitoring
management能够作的任何事外加:
列出全部virtual hosts,包括他们不能登陆的virtual hosts
查看其余用户的connections和channels
查看节点级别的数据如clustering和memory使用状况
查看真正的关于全部virtual hosts的全局的统计信息
administrator
policymaker和monitoring能够作的任何事外加:
建立和删除virtual hosts
查看、建立和删除users
查看建立和删除permissions
关闭其余用户的connections
建立用户并设置角色:
能够建立管理员用户,负责整个MQ的运维,例如:
$sudo rabbitmqctl add_user dmin Aa@adm
赋予其administrator角色:
$sudo rabbitmqctl set_user_tags dmin administrator
能够建立RabbitMQ监控用户,负责整个MQ的监控,例如:
$sudo rabbitmqctl add_user monitoring Aa@mon
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags monitoring monitoring
能够建立某个项目的专用用户,只能访问项目本身的virtual hosts
$sudo rabbitmqctl add_user transport Aa@tra
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags transpor transport
能够建立某个项目的专用用户,只能访问项目本身的virtual hosts
$sudo rabbitmqctl add_user qianlima Aa@qia
赋予其monitoring角色:
$sudo rabbitmqctl set_user_tags transpor transport
建立和赋角色完成后查看并确认:
$sudo rabbitmqctl list_users
(1) 设置用户权限
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
(2) 查看(指定hostpath)全部用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
(3) 查看指定用户的权限信息
rabbitmqctl list_user_permissions User
(4) 清除用户的权限信息
rabbitmqctl clear_permissions [-p VHostPath] User
rabbitmq理解:
https://www.jianshu.com/p/124cda48e4ea?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
https://www.jianshu.com/p/4b3a57e94648 镜像策略---没有看懂
https://www.ibm.com/developerworks/cn/opensource/os-cn-RabbitMQ/index.html
http://www.javashuo.com/article/p-nwnzgmib-dr.html rabbitmq winfrom
rabbitmq的几种安装方式:
https://www.jianshu.com/p/f05803196c24
http://www.pandan.xyz/2017/02/11/rabbitmq%20%E9%9B%86%E7%BE%A4%E6%90%AD%E5%BB%BA/
rabbitmq配置文件相关
http://www.javashuo.com/article/p-evuqlrck-dv.html
集群高可用
http://www.javashuo.com/article/p-giwbpbcc-gd.html
https://www.jianshu.com/p/5fcfd7de0a48
http://chyufly.github.io/blog/2016/04/10/rabbitmq-cluster/
http://kuma-uni.blogspot.com/2017/03/rabbitmqha-rabbitmq-1.html
http://www.cnblogs.com/xishuai/p/centos-rabbitmq-cluster-and-haproxy.html
https://hk.saowen.com/a/88c336785bc62fae232429478ffde1d2b0ef2177369577755f1fcff1d57fb35e
http://www.cnblogs.com/xishuai/p/centos-rabbitmq-cluster-and-haproxy.html
https://88250.b3log.org/rabbitmq-clustering-ha
rabbimq用户配置管理:
http://www.ywnds.com/?p=5388
镜像队列
http://www.javashuo.com/article/p-mlnirdgd-gc.html
rabbitmq控制资源消耗
http://www.javashuo.com/article/p-heqzblpu-ct.html
语言理解四种类型
https://blog.csdn.net/hry2015/article/details/79118804
开发角度理解中类型:
http://www.javashuo.com/article/p-cxwtfcin-eu.html
经典的图介绍四种类型
https://blog.csdn.net/dandanzmc/article/details/52262850
为啥要用mq
https://blog.csdn.net/whycold/article/details/41119807
http://www.diggerplus.org/archives/3110
http://www.javashuo.com/article/p-nwnzgmib-dr.html
http://www.diggerplus.org/archives/3110
https://www.cnblogs.com/youzhongmin/p/6940377.html
http://www.diggerplus.org/archives/3110
如何建立queue和echange
https://blog.csdn.net/zheng911209/article/details/49949303
定制rabbitmq的启动方式:
https://www.cnblogs.com/ylsforever/p/6600925.html
UserParameter=java-num.count, ps -ef | grep java| grep -v grep |wc -l
UserParameter=wbms.process[*],ps -ef|grep java|grep -e '$1'|grep -v grep|wc -l
生产消费验证:
https://blog.csdn.net/qq_34021712/article/details/72633520