RabbitMQ-理解消息通信-虛擬主機和隔離
更重要的是,他擁有自己的權限機制,這使得你能夠安全地使用一個RabbitMQ服務器來服務眾多的應用程序
vhost就像是虛擬機之與物理服務器一樣:他們在各個實例間提供邏輯上的分離,允許你為不同程序安全保密地運行數據,它既能將同一個Rabbit的眾多客戶區分開來,又可以避免隊列和交換器命名沖突
vhost是AMQP概念的基礎,你必須在連接時進行指定
RabbitMQ包含了一個開箱即用的默認vhost:”/“,如果你不需要多個vhost,那麽就使用默認的吧,使用缺省的guest用戶名和密碼guest就可以訪問默認的vhost
當你在RabbitMQ集群上創建vhost,整個集群上都會創建該vhost,vhost不僅消除了為基礎架構中的每一層運行一個RabbitMQ服務器的需要,同樣也避免了為每一層創建不同集群
Rabbitmq~對Vhost的配置
rabbitmq裏有一些概念我們要清楚,如vhost,channel,exchange,queue等,而前段時間在部署rabbitmq環境時啟用了虛擬主機vhost,感覺他主要是起到了消息隔離的作用,下面分別再說一下它們的知識。
VHost
vhost去做第一層的區分,虛擬主機,工作組等,它默認是/
添加自己項目的Vhost
添加成功後,在列表裏可以顯示
添加建立一個用戶,設置密碼
把用戶添加到對應的VHost組裏,註意連接時也要使用VHost參數,如果沒有特別設置,可以不指定它,默認就是/
channel
創建了客戶端到Broker之間的連接後,客戶端還是不能發送消息的。需要為每一個Connection創建Channel,AMQP協議規定只有通過Channel才能執行AMQP的命令。一個Connection可以包含多個Channel。之所以需要Channel,是因為TCP連接的建立和釋放都是十分昂貴的,如果一個客戶端每一個線程都需要與Broker交互,如果每一個線程都建立一個TCP連接,暫且不考慮TCP連接是否浪費,就算操作系統也無法承受每秒建立如此多的TCP連接
Exchange
有多種類型,我們在發布和訂閱時,要指定這些類型,一般我們會使用性能更好的direc,或者更靈活的,支持通配符的topic
在客戶端連接時,需要指定一下VHost
exchangeName = options.ExchangeName; mqServerHost = options.MqServerHost; userName = options.UserName; password = options.Password; var factory = new ConnectionFactory() { Uri = new Uri(mqServerHost) }; factory.VirtualHost = options.VirtualHost;
好了,本講主要介紹了如何去配置VHost和如何去連接它!
本文參考https://blog.csdn.net/wangnan9279/article/details/71425683
https://www.cnblogs.com/lori/p/7852534.html
RabbitMQ-理解消息通信-虛擬主機和隔離