1. 程式人生 > >RabbitMQ-理解消息通信-虛擬主機和隔離

RabbitMQ-理解消息通信-虛擬主機和隔離

rabbitMq vhost

每個RabbitMQ服務器都能創建虛擬的消息服務器,我們稱之為虛擬主機(vhost)每一個vhost本質上是一個mini版的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-理解消息通信-虛擬主機和隔離