欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

為什么使用mq

林雅南2年前22瀏覽0評論

為什么使用mq?

消息總線( Message Queue),后文稱 MQ,是一種跨進程的通信機制,用于上下游傳遞消息。

MQ全稱為Message Queue, 消息隊列(MQ)是一種應用程序對應用程序的通信方法。應用程序通過讀寫出入隊列的消息(針對應用程序的數據)來通信,而無需專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,直接調用通常是用于諸如遠程過程調用的技術。排隊指的是應用程序通過 隊列來通信。隊列的使用除去了接收和發送應用程序同時執行的要求。

在互聯網架構中,MQ是一種非常常見的上下游“邏輯解耦+物理解耦”的消息通信服務。

使用了MQ之后,消息發送上游只需要依賴MQ,邏輯上和物理上都不用依賴其他服務。

既然MQ是互聯網分層架構中的解耦利器,那所有通訊都使用MQ豈不是很好?這是一個嚴重的誤區,調用與被調用的關系,是無法被MQ取代的。

MQ它是一個高效的可嵌入庫,它解決了大部分應用程序需要解決的問題,變得在網絡上有良好的可伸縮性,而沒有多少成本。

它能在后臺線程異步處理I/O。這些線程使用無鎖數據結構與應用程序線程進行通信,所以并發.MQ 應用程序不再需要鎖、信號量,或其他等待狀態。

組件可以動態地來去自如,而MQ 會自動重新連接。這意味著你可以以任何順序啟動組件。你可以創建“面向服務的架構”(SOA),其中的服務可以在任何時間加入和離開網絡。

它根據需要自動對消息排隊。為此,它會智能地在對消息排隊之前,將消息盡可能地推進到接收者。

它有一個處理過滿隊列(稱為“高水位標志”)的方法。當隊列滿時,.MQ 會自動阻止發件人,或丟棄消息,這取決于你正在做的是哪種消息傳遞(即所謂的“模式”)。

它可以讓你的應用程序通過任意傳輸協議來互相交流,這些協議可以是:TCP、多播、進程內、進程間。你不需要更改代碼以使用不同的傳輸工具。

它使用依賴于消息傳遞模式的不同策略,安全地處理速度慢/ 阻塞的讀取者。

它可以讓你采用多種模式,如請求- 應答和發布- 訂閱來將消息路由。這些模式是指你如何創建拓撲結構和網絡結構。

它可以讓你創建代理(proxy)來排隊、轉發,或通過一個調用來捕獲消息。代理可以降低網絡互聯的復雜性。

它使用在線路上的簡單組幀原封不動地傳遞整個消息。如果你寫了一個10KB 的消息,那么你將收到一個10KB 的消息。

它不對消息強加任何格式。它們是零字節到千兆字節的二進制大對象。當你想表示你的數據時,可以選擇其上的其他一些產品,如谷歌的協議緩沖區、XDR 等。

它能智能地處理網絡錯誤。有時候它會重試,有時它會告訴你某個操作失敗。

它可以減少你的能源消耗。少花CPU 多辦事意味著使用電腦更少的能源,你可以讓你的舊電腦使用更長的時間。

實際上,MQ 做的比這更多。它對你如何開發網絡功能的應用程序有顛覆性的影響。從表面上看,這是一個在其上做zmq_msg_recv() 和zmq_msg_send() 的套接字風格的API。但該消息處理循環迅速成為中心循環,而你的應用程序很快就會分解成一組消息處理任務。它是優雅和自然的。而且,它可擴展:每個任務對應一個節點,節點通過任意傳輸方式互相交談。在一個進程中的兩個節點(節點是一個線程),在一臺電腦中的兩個節點(節點是一個進程),或一個網絡上的兩臺電腦(節點是一臺電腦),所有的處理方式都是相同的,不需要更改應用程序代碼。

所以MQ在任何應用程序中以接近零的消耗開展工作。它應該是不需要任何其他依賴就可以鏈接的庫。無須額外的變動部件,所以沒有額外的風險。它應該能運行在任何操作系統上,并能用任何編程語言開展工作。