rabbitmq

初識rabbitmq以及我們線上業務環境的mq服務方式:

交換器的4種類型:
direct 根據路由鍵投遞消息
fanout 廣播方式,綁定到同一個exchange上的queue都能收到同樣的msg。不需要路由鍵,如果接受到消息的Exchange沒有與任何Queue綁定,則消息會被拋棄
topic 根據queue定義的topic名稱來接收相應的msg
header (很少用,直接忽略它)

運維 09:18:31
faout就是廣播,我們現在使用的就是faout
運維 09:19:03
faout沒有routing key綁定確實簡單
運維 09:19:37
但是我們的業務的調用連是一條接一條的爲啥不用topic,
運維 09:20:07
這樣srm隊列獲取wbms的隊列消息不是更快麼
架構師 09:20:58
https://www.cnblogs.com/zhangweizhong/p/5713874.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
要多分析業務而不是技術

我們線上的消息很少,一秒也就幾票數據,二十票每秒都算高的
我們線上業務的mq的queue之間,沒先後順序,相互間都有互傳數據,
數據庫相互都獨立的,爲了冗餘數據必定要做一些回傳
目前使用的是faout,一個功能一個echange,通常Echange 與queue的名字相同

rabbitmq的事務機制和確認機制
https://blog.csdn.net/u013256816/article/details/55515234從開發角度理解

消息確認機制:
RabbitMQ提供了transaction、confirm兩種消息確認機制。
transaction即事務機制,手動提交和回滾;
confirm機制提供了Confirmlistener和waitForConfirms兩種方式。
confirm機制效率明顯會高於transaction機制,但transaction的優勢在於強一致性。如果沒有特別的要求,建議使用conrim機制。

Confirmlistener從代碼或者抓包可以看待我們線上業務使用的是confirm
事務機制適用的場景極少的,要麼涉及錢,要麼有多機房的情況,或者網絡質量很差才考慮事務確認

1、從實驗來看,消息的確認機制只是確認publisher發送消息到broker,由broker進行應答,不能確認消息是否有效消費。
2、而爲了確認消息是否被髮送給queue,應該在發送消息中啓用參數mandatory=true,使用ReturnListener接收未被髮送成功的消息。
3、接下來就需要確認消息是否被有效消費。publisher端目前並沒有提供監聽事件,但提供了應答機制來保證消息被成功消費,應答方式:

basicAck:成功消費,消息從隊列中刪除

basicNack:requeue=true,消息重新進入隊列,false被刪除

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節點能自動嘗試啓動所在節點的應用程序。

一、安裝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 ~]#

二、修改host配置
cat /etc/hosts
172.16.42.13 prod-wuliu-rabbitmq-42-13
172.16.42.14 prod-wuliu-rabbitmq-42-14

三、設置 Erlang Cookie
Erlang Cookie 文件:/var/lib/rabbitmq/.erlang.cookie。這裏將 node1 的該文件複製到 node2、node3,由於這個文件權限是 400,所以需要先修改 node2、node3 中的該文件權限爲 777:

chmod 777 /var/lib/rabbitmq/.erlang.cookie

然後將 node1 中的該文件拷貝到 node2、node3,最後將權限和所屬用戶/組修改回來:

chmod 400 /var/lib/rabbitmq/.erlang.cookie

chown rabbitmq /var/lib/rabbitmq/.erlang.cookie

chgrp rabbitmq /var/lib/rabbitmq/.erlang.cookie

四、使用 -detached 參數運行各節點
啓動方式
/ect/init.d/rabbit-server start
rabbitmq-server start &
rabbitmq-server -detached 推薦使用
定製rabbitmq的啓動方式https://www.cnblogs.com/ylsforever/p/6600925.html

啓動rabbitmq啓動:

rabbitmqctl stop

rabbitmq-server -detached

查看服務端口是否正常啓動:
[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後臺監控系統訪問端口;

五、創建集羣:
啓動節點
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默認集羣模式,但並不保證隊列的高可用性,儘管交換機、綁定這些可以複製到集羣裏的任何一個節點,
但是隊列內容不會複製,雖然該模式解決一部分節點壓力,但隊列節點宕機直接導致該隊列無法使用,只能等待重啓,所以要想在隊列節點宕機或故障也能正常使用,就要複製隊列內容到集羣裏的每個節點,需要創建鏡像隊列

六、設置鏡像隊列策略

鏡像隊列
RabbitMQ 的 Cluster 集羣模式一般分爲兩種,普通模式和鏡像模式。

普通模式:默認的集羣模式,以兩個節點(rabbit01、rabbit02)爲例來進行說明。對於 Queue 來說,消息實體只存在於其中一個節點 rabbit01(或者 rabbit02),rabbit01 和 rabbit02 兩個節點僅有相同的元數據,即隊列的結構。當消息進入 rabbit01 節點的 Queue 後,consumer 從 rabbit02 節點消費時,RabbitMQ 會臨時在 rabbit01、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

在rabbitmq的內部數據庫添加用戶;

add_user <username> <password>

刪除一個用戶;

delete_user <username>

改變用戶密碼(也是改變web管理登陸密碼);

change_password <username> <newpassword>

清除用戶的密碼,該用戶將不能使用密碼登陸,但是可以通過SASL登陸如果配置了SASL認證;

clear_password <username>

設置用戶tags;

set_user_tags <username> <tag> ...

列出用戶;

list_users

創建一個vhosts;

add_vhost <vhostpath>

刪除一個vhosts;

delete_vhost <vhostpath>

列出vhosts;

list_vhosts [<vhostinfoitem> ...]

針對一個vhosts給用戶賦予相關權限;

set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

清除一個用戶對vhosts的權限;

clear_permissions [-p <vhostpath>] <username>

列出哪些用戶可以訪問該vhosts;

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的內部數據庫添加用戶;

add_user <username> <password>

刪除一個用戶;

delete_user <username>

改變用戶密碼(也是改變web管理登陸密碼);

change_password <username> <newpassword>

清除用戶的密碼,該用戶將不能使用密碼登陸,但是可以通過SASL登陸如果配置了SASL認證;

clear_password <username>

設置用戶tags;

set_user_tags <username> <tag> ...

列出用戶;

list_users

創建一個vhosts;

add_vhost <vhostpath>

刪除一個vhosts;

delete_vhost <vhostpath>

列出vhosts;

list_vhosts [<vhostinfoitem> ...]

針對一個vhosts給用戶賦予相關權限;

set_permissions [-p <vhostpath>] <user> <conf> <write> <read>

清除一個用戶對vhosts的權限;

clear_permissions [-p <vhostpath>] <username>

列出哪些用戶可以訪問該vhosts;

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
https://www.cnblogs.com/dubing/p/4017613.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配置文件相關
https://blog.51cto.com/canonind/1851494

集羣高可用
https://blog.csdn.net/WoogeYu/article/details/51119101
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

鏡像隊列
https://segmentfault.com/a/1190000010702020

rabbitmq控制資源消耗
https://blog.51cto.com/lee90/2058126

語言理解四種類型
https://blog.csdn.net/hry2015/article/details/79118804
開發角度理解中類型:
https://www.cnblogs.com/julyluo/p/6265775.html
經典的圖介紹四種類型
https://blog.csdn.net/dandanzmc/article/details/52262850
爲啥要用mq
https://blog.csdn.net/whycold/article/details/41119807

http://www.diggerplus.org/archives/3110
https://www.cnblogs.com/dubing/p/4017613.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章