一條消息的產(chǎn)生到消費:
生產(chǎn)者發(fā)送一條消息時,先和RabblitMQ直接建立一條通道(channl),通過channl將消息發(fā)送到交換器,
交換器通過特定的路由規(guī)則routing_key,將消息轉發(fā)到特定的隊列上。
RabblitMQ會監(jiān)聽該隊列,一旦有消費者訂閱該隊列,則將消息發(fā)送給該消費者處理,然后將消息從消息隊列中刪除
RabbitMQ 基礎命令
Virtual_host管理
新建:rabbitmqctl add_vhost xxx
撤銷: rabbitmqctl delete_vhost xxx
用戶管理:
新建用戶:rabbitmqctl add_user usernamexxx pwdxxx
刪除用戶:rabbitmqctl delete_user usernamexxx
修改密碼:rabbitmqctl change_password {username} {newpassword}
設置用戶角色:rabbitmqctl set_user_tags {username} {tag...}
tag 可以為: administrator, monitoring, management
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" //添加權限
rabbitmqctl set_user_tags username administrator //修改用戶角色
權限設置說明:rabbitmqctl set_permissions [-pvhostpath] {user} {conf} {write} {read}
Vhostpath:Vhost路徑。
user:用戶名。
Conf:一個正則表達式match哪些配置資源能夠被該用戶訪問。
Write:一個正則表達式match哪些配置資源能夠被該用戶讀。
Read:一個正則表達式match哪些配置資源能夠被該用戶訪問。
清除所有隊列:rabbitmqctl reset
查看隊列信息:rabblimqctl list_queues
可以直接運行rabbitmqctl 來管理自己的mq節(jié)點,也可以指定-n rabbit@[servername]來管理遠程節(jié)點
servername可以是ip或者域名
隊列和交換器的durable 屬性默認false ,斷電重啟之后重新創(chuàng)建隊列,消息丟失,將它設置為true可以不
用重新建隊列
持久化消息:能從服務器崩潰中恢復消息
(1)消息發(fā)布前,將它的投遞模式設置為2標記持久化
(2)發(fā)送到持久的交換器
(3)并投放到持久化隊列
恢復:寫入磁盤上的持久化文件,rabbit會在消息提交到日志后才發(fā)送響應,但若消息路由到了
非持久化隊列,RQM會自動從持久性日志刪除,并無法在重啟中自動恢復。
exchange 交換機和綁定routing key
exchange 的作用就是類似路由器,routing key 就是路由鍵,服務器會根據(jù)路由鍵
將消息從交換機路由到隊列上去。
exchange 有多個種類,direct、fanout、topict、header(非路由鍵匹配,功能和direct類
似,很少用。)前三種類似集合對應關系那樣,(direct) 1:1, (fanout) 1:N
(topic) N:1
direct 1:1 類似完全匹配。
fanout 1:N可以把一個消息并行到多個隊列,當多個隊列綁定到fanout的交換器
,那么交換器一次性拷貝多個消息分別發(fā)送到綁定的隊列上,每個隊列有這個消息的副本。