.Net RabbitMQ之消息通訊 構建RPC服務器

一、消息投遞服務html

RabbitMQ是一種消息投遞服務,怎麼理解這句話呢?即RabbitMQ即不是消息的生產者,也是消息的消費者.他就像現實生活中快遞模式,消費者在電商網站上下單買了一件商品,此時對應的生產者(商家)則生產了一件貨物(概念上的生產,可能已經生產好了),接着生產者(商家)將貨物發送給快遞公司,由於消費者下單了這個貨物,至關於訂閱了這件貨物,因此快遞公司將會把這件貨物發送給對應的消費者.RabbitMQ就至關於這裏面的快遞公司.服務在生產者和消費者之間創建橋樑,即通訊.數據庫

 

二、RabbitMQ的實現消息投遞的方式服務器

生產者建立消息(包含消息的(有效載荷-即有效的信息,注:他不會關心消息的內容)和(標籤-發送給哪一個消費者,注:RabbitMQ會根據標籤吧消息發送給感興趣的對方)),發佈到對應的代理服務器.具體流程圖以下性能

 

 

可是,上面的圖並非很是準確,由於消費者並不會訂閱其中的某一條消息,消費者鏈接到代理服務器,且他只會訂閱一個消息隊列,當生產者向消費者所訂閱的消息隊列上發送數據時,那麼消費者會接收到該隊列的數據.網站

且在RabbitMQ在消息路由的過程當中,消息的標籤並無隨有效載荷一同傳遞,除非生產者在消息的有效載荷中顯示指定了消息的實際生產者,因此正常狀況下,RabbitMQ並不會告訴消費者誰生產了這個消息.操作系統

 

三、信道線程

(1)、傳統TCP鏈接RabbitMQ存在的問題代理

在使用RabbitMQ生產消息或者消費消息時,應用程序必須鏈接到RabbitMQ,因此一般狀況下,你須要創建一個TCP鏈接,向數據庫同樣,可是創建TCP鏈接的代價是很大的,這也說明了爲何在使用SqlClient或者其餘數據庫操做類庫時,使用IDbConnection後,必須釋放的緣由.且操做系統每秒建立TCP鏈接的數量有限.若是你知道套接字這個坑的話.因此高峯期使用線程去建立RabbitMQ鏈接,顯然存在性能瓶頸.htm

(2)、爲何要使用信道blog

爲了解決(1)中的問題,RabbitMQ採用了信道的概念,即全部應用程序線程共用一個TCP鏈接,鏈接到RabbitMQ,線程調用RabbitMQ發佈或者消費消息時,會在現有的TCP鏈接上建立一個信道,完成餘下的操做.由於你能夠每秒成千上萬的建立信道而不會影響操做系統.同時你能夠試試每秒成千上萬的建立數據庫鏈接,對比試試.

注:TCP鏈接和信道時包含關係,即TCP鏈接包含信道.在一條TCP鏈接上建立信道是沒有限制的

 

四、使用RabbitMQ搭建RPC服務器

本系列文章跳過了RabbitMQ基礎部分的介紹,直接進入RabbitMQ的RPC服務器構建,由於網上關於基礎RabbitMQ的使用已經有不少,能夠自行百度,關於基礎(隊列、交換機、信道等概念)能夠參考https://www.cnblogs.com/stulzq/p/7551819.html,寫的很好.下面進入正題.

相關文章
相關標籤/搜索