乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      如何用好消息隊列RabbitMQ?

       xujin3 2017-10-21
      作者|張輝清、楊麗
      編輯|雨多田光
      一、寫在前面

      使用過分布式中間件的人都知道,程序員使用起來并不復(fù)雜,常用的客戶端 API 就那么幾個,比我們?nèi)粘>帉懗绦驎r用到的 API 要少得多。但是分布式中間件在中小研發(fā)團隊中使用得并不多,為什么會這樣呢?

      原因是中間件的職責(zé)相對單一,客戶端的使用雖然簡單,但整個環(huán)境搭起來卻不容易。所以對于系列中的幾篇中間件文章,我們重點放在解決門檻問題,把服務(wù)端環(huán)境搭好(后期可云或運維解決),把中間件的基本職責(zé)和功能介紹好,把客戶端 Demo 寫好,讓程序員抬抬腳,在調(diào)試代碼中即可輕松入門。

      根據(jù)我們以往幾年的經(jīng)驗,初次接觸也可以自主快速學(xué)習(xí),文章和 Demo 以實用為主,以下是消息隊列 RabbitMQ 的快速入門及應(yīng)用。

      二、為什么要用消息隊列 MQ

      1、業(yè)務(wù)系統(tǒng)往往要求響應(yīng)能力特別強,能夠起到削峰填谷的作用。

      2、解耦:如果一個系統(tǒng)掛了,則不會影響另外個系統(tǒng)的繼續(xù)運行。

      3、業(yè)務(wù)系統(tǒng)往往有對消息的高可靠要求,以及有對復(fù)雜功能如 Ack 的要求。

      4、增強業(yè)務(wù)系統(tǒng)的異步處理能力,減少甚至幾乎不可能出現(xiàn)并發(fā)現(xiàn)象:

      使用消息隊列,就好比為了防汛而建葛洲壩,有大量數(shù)據(jù)的堆積能力,然后可靠地進(jìn)行異步輸出。例如:

      傳統(tǒng)做法存在如下問題,請見上圖:

      1、一旦業(yè)務(wù)處理時間超過了定時器時間間隔,就會導(dǎo)致漏單。

      2、如果采用新開線程的方式獲取數(shù)據(jù),那么由于大量新開線程處理,會容易造成服務(wù)器宕機。

      3、數(shù)據(jù)庫壓力大,易并發(fā)。

      使用 MQ 后的好處,請見上圖

      1、業(yè)務(wù)可注冊、可配置。

      2、獲取數(shù)據(jù)規(guī)則可配置。

      3、成功消費 MQ 中的消息才會被 Ack,提高可靠性。

      4、大大增強了異步處理業(yè)務(wù)作業(yè)的能力:

      定時從數(shù)據(jù)庫獲取數(shù)據(jù)后,存入 MQ 消息隊列,然后 Job 會定期掃描 MQ 消息隊列,假設(shè) Job 掃描后先預(yù)取 5 條消息,然后異步處理這 5 條消息,也就是說這 5 條消息可能會同時被處理。

      三、RabbitMQ 簡介

      RabbitMQ 是基于 AMQP 實現(xiàn)的一個開源消息組件,主要用于在分布式系統(tǒng)中存儲轉(zhuǎn)發(fā)消息,由因高性能、高可用以及高擴展而出名的 Erlang 語言寫成。

      其中,AMQP(Advanced Message Queuing Protocol,即高級消息隊列協(xié)議),是一個異步消息傳遞所使用的應(yīng)用層協(xié)議規(guī)范,為面向消息的中間件設(shè)計。

      RabbitMQ 特點如下:

      高可靠:RabbitMQ 提供了多種多樣的特性讓你在可靠性和性能之間做出權(quán)衡,包括持久化、發(fā)送應(yīng)答、發(fā)布確認(rèn)以及高可用性。

      高可用隊列:支持跨機器集群,支持隊列安全鏡像備份,消息的生產(chǎn)者與消費者不論哪一方出現(xiàn)問題,均不會影響消息的正常發(fā)出與接收。

      靈活的路由:所有的消息都會通過路由器轉(zhuǎn)發(fā)到各個消息隊列中,RabbitMQ 內(nèi)建了幾個常用的路由器,并且可以通過路由器的組合以及自定義路由器插件來完成復(fù)雜的路由功能。

      支持多客戶端:對主流開發(fā)語言(如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等)都有客戶端實現(xiàn)。

      集群:本地網(wǎng)絡(luò)內(nèi)的多個 Server 可以聚合在一起,共同組成一個邏輯上的 broker。

      擴展性:支持負(fù)載均衡,動態(tài)增減服務(wù)器簡單方便。

      權(quán)限管理:靈活的用戶角色權(quán)限管理,Virtual Host 是權(quán)限控制的最小粒度。

      插件系統(tǒng):支持各種豐富的插件擴展,同時也支持自定義插件,其中最常用的插件是 Web 管理工具 RabbitMQ_Management,其 Web UI 訪問地址:

      http://139.198.13.12:6233/,

      登錄賬號:flight,密碼:yyabc123。

      四、RabbitMQ 工作原理

      消息從發(fā)送端到接收端的流轉(zhuǎn)過程即 RabbitMQ 的消息工作機制,請見下圖:

      消息發(fā)送與接收的工作機制

      五、RabbitMQ 基本用法

      共有 6 種基本用法:單對單、單對多、發(fā)布訂閱模式、按路由規(guī)則發(fā)送接收、主題、RPC(即遠(yuǎn)程存儲調(diào)用)。我們將介紹單對單、單對多和主題的用法。

      1、單對單:單發(fā)送、單接收。請見下圖。

      2、單對多:一個發(fā)送端,多個接收端,如分布式的任務(wù)派發(fā)。請見下圖:

      3、主題:Exchange Type 為 topic,發(fā)送消息時需要指定交換機及 Routing Key,消費者的消息隊列綁定到該交換機并匹配到 Routing Key 實現(xiàn)消息的訂閱,訂閱后則可接收消息。只有消費者將隊列綁定到該交換機且指定的 Routing Key 符合匹配規(guī)則,才能收到消息。

      其中 Routing Key 可以設(shè)置成通配符,如:*或 #(*表示匹配 Routing Key 中的某個單詞,# 表示任意的 Routing Key 的消息都能被收到)。如果 Routing Key 由多個單詞組成,則單詞之間用. 來分隔。

      命名規(guī)范

      交換機名的命名建議:Ex{AppID}.{自定義 ExchangeName},隊列名的命名建議:MQ{AppID}.{自定義 QueueName} 。

      六、Demo 下載及更多資料

      RabbitMQDemo 下載地址

      https://github.com/das2017/RabbitMQDemo

      RabbitMQ 的官方網(wǎng)址

      http://www.

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多