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

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

    • 分享

      RabbitMQ 的安裝以及介紹

       漢無(wú)為 2018-08-26

      簡(jiǎn)介

      RabbitMQ(消息隊(duì)列/消息中間件)是流行的開源消息隊(duì)列系統(tǒng),是AMQP(Advanced Message Queuing Protocol高級(jí)消息隊(duì)列協(xié)議)的標(biāo)準(zhǔn)實(shí)現(xiàn)。用Erlang語(yǔ)言開發(fā)。RabbitMQ具有良好的性能和實(shí)效性,同時(shí)還支持集群和負(fù)載部署,非常適用于在較大規(guī)模的分布式系統(tǒng)中使用。

      Java常見的消息隊(duì)列技術(shù):RabbitMQ、ActiveMQ、Redis(List數(shù)據(jù)格式)、JMS(Java Message Service)等。

      RabbitMQ官網(wǎng):http://www./

      消息隊(duì)列比較:http://blog.csdn.net/sunxinhere/article/details/7968886

      RabbitMQ下載地址:http://www./download.html

      安裝

      安裝erlang依賴。

      1. 安裝erlang的rpm庫(kù)。

      下載erlang的倉(cāng)庫(kù):

      wget http://packages./erlang-solutions-1.0-1.noarch.rpm (如果提示wget不是一個(gè)命令執(zhí)行yum install wget)

      安裝erlang倉(cāng)庫(kù):rpm -Uvh erlang-solutions-1.0-1.noarch.rpm

      1. 安裝erlang:yum install erlang

      安裝RabbitMQ

      1. 解壓rabbitmq-server-generic-unix-3.6.12.tar.xz。

      (*.tar.xz 需要使用xz -d 解壓后在 tar -xf 解壓)

      (安裝xz: yum install xz.x86_64)①

      ② xz -d rabbitmq-server-generic-unix-3.6.12.tar.xz

      1. 進(jìn)入sbin目錄啟動(dòng)rabbitMQ:./rabbitmq-server start

      RabbitMQ配置

      啟動(dòng)RabbitMQ后執(zhí)行:

      1. ./rabbitmqctl add_user admin 123456(創(chuàng)建用戶)
      2. ./rabbitmqctl set_user_tags admin administrator(將創(chuàng)建好的用戶加入管理員)
      3. ./rabbitmqctl set_permissions -p ''/'' admin ''.'' ''.'' ''.*''(授權(quán))
      4. ./rabbitmq-plugins enable rabbitmq_management 啟動(dòng)RabbitMQ管理頁(yè)面
      5. 重啟MQ服務(wù)、開放5672/15672/25672端口。在瀏覽器輸入ip:15672后出現(xiàn)RabbitMQ管理臺(tái)。

      消息隊(duì)列運(yùn)行原理

      從上圖可以看出、生產(chǎn)者、消息隊(duì)列、消費(fèi)者是最重要的三個(gè)概念:

      生產(chǎn)者(Producer):創(chuàng)建消息到消息隊(duì)列中。

      消息隊(duì)列(Queue):存儲(chǔ)消息。

      消費(fèi)者(Consumer):監(jiān)聽指定消息隊(duì)列,當(dāng)消息隊(duì)列接收到消息后,獲取消息并處理。

      RabbitMQ:創(chuàng)建消息隊(duì)列,并提供API給生產(chǎn)者和消費(fèi)者進(jìn)行存取消息。

      生產(chǎn)者產(chǎn)生消息并調(diào)用RabbitMQ的API將消息加入到對(duì)應(yīng)的消息隊(duì)列中,消費(fèi)者通過(guò)RabbitMQ的API從消息隊(duì)列中獲取消息進(jìn)行消費(fèi)。

      RabbitMQ核心

      RabbitMQ的核心由虛擬機(jī)、交換機(jī)、隊(duì)列、綁定這四部分組成。

      虛擬機(jī)(Virtual Host)

      在RabbitMQ中虛擬機(jī)主要是用于控制權(quán)限顆粒度,RabbitMQ默認(rèn)的虛擬機(jī)路徑為/。一個(gè)虛擬機(jī)包含一組交換機(jī)、隊(duì)列和綁定。

      例如admin的virtual host為/、zs的virtual host為/test。假設(shè)RabbitMQ Server中有/test /hello /demo,那么admin可以操作全部虛擬機(jī)下的隊(duì)列而zs只可以操作/test下的隊(duì)列。

      交換機(jī)/路由器(Exchange)

      RabbitMQ中的交換機(jī)本身并不進(jìn)行消息的存儲(chǔ),主要用做進(jìn)行消息的轉(zhuǎn)發(fā)到指定規(guī)則的隊(duì)列內(nèi)。生產(chǎn)者在傳遞消息時(shí)并不是直接傳到隊(duì)列中,而是先發(fā)送給交換機(jī),交換機(jī)會(huì)通過(guò)消息中的routing_key按照特定的路由算法轉(zhuǎn)發(fā)給路由綁定的對(duì)應(yīng)隊(duì)列。Exchange可以和多個(gè)Queue綁定,Exchange本身也可以進(jìn)行持久化、臨時(shí)、自動(dòng)刪除。

      路由規(guī)則

      直接交換器(Dirct)

      Dirct的工作方式類似單播,Exchange會(huì)將x消息轉(zhuǎn)發(fā)至ROUTING_KEY完全匹配的隊(duì)列中。

      廣播交換器(Fanout)

      Fanout的工作方式就是廣播,Exchange會(huì)將消息轉(zhuǎn)發(fā)至所有與其綁定的隊(duì)列中,而不管ROUTING_KEY的是什么。

      主題交換器(Topic)

      Topic的工作方式是模糊匹配,Exchange會(huì)將消息轉(zhuǎn)發(fā)和ROUTING_KEY匹配模式相同的所有隊(duì)列。比如ROUTING_KEY為user.dj的Message會(huì)轉(zhuǎn)發(fā)給綁定匹配模式為包含*user.dj*的隊(duì)列( * 表是匹配一個(gè)任意詞組,#表示匹配0個(gè)或多個(gè)詞組)。

      頭交換機(jī)(Headers)[了解]

      Headers類型的exchange使用的比較少,它也是忽略routingKey的一種路由方式。是使用Headers來(lái)匹配的。Headers是一個(gè)鍵值對(duì),可以理解成Hashtable。發(fā)送者在發(fā)送的時(shí)候定義一些鍵值對(duì),接收者也可以再綁定時(shí)候傳入一些鍵值對(duì),兩者匹配的話,則對(duì)應(yīng)的隊(duì)列就可以收到消息。匹配有兩種方式all和any。這兩種方式是在接收端必須要用鍵值''x-mactch''來(lái)定義。all代表定義的多個(gè)鍵值對(duì)都要滿足,而any則代碼只要滿足一個(gè)就可以了。fanout,direct,topic exchange的routingKey都需要要字符串形式的,而headers exchange則沒(méi)有這個(gè)要求,因?yàn)殒I值對(duì)的值可以是任何類型。

      綁定binding

      所謂的binding就是將交換機(jī)與一個(gè)特定的隊(duì)列綁定起來(lái),且交換機(jī)與隊(duì)列的關(guān)系可以是一對(duì)一、一對(duì)多、多對(duì)多。

      消息隊(duì)列(queue)

      Queue是用來(lái)存儲(chǔ)消息的容器,RabbitMQ提供了FIFO(先進(jìn)先出)的機(jī)制,可以緩存消息也可以將消息持久化、臨時(shí)或者自動(dòng)刪除。

      設(shè)置為持久化的隊(duì)列,queue中的消息會(huì)在server本地硬盤存儲(chǔ)一份,防止系統(tǒng)奔潰后數(shù)據(jù)丟失。

      設(shè)置為臨時(shí)隊(duì)列,queue中的數(shù)據(jù)在系統(tǒng)重啟之后就會(huì)丟失

      設(shè)置為自動(dòng)刪除的隊(duì)列,當(dāng)不存在用戶(生產(chǎn)者和消費(fèi)者)連接到server,隊(duì)列中的數(shù)據(jù)會(huì)被自動(dòng)刪除。

      (消費(fèi)者消費(fèi)完消息后消息就不存在了和設(shè)置了什么狀態(tài)無(wú)關(guān))

      Message(消息體)

      Message:由Header和Body組成,Header是由生產(chǎn)者添加的各種屬性的集合,包括Message是否被持久化、由哪個(gè)Message Queue接受、優(yōu)先級(jí)是多少等。而Body是真正需要傳輸?shù)臄?shù)據(jù)。

      通信過(guò)程

      假設(shè)P1和C1注冊(cè)了相同的Broker,Exchange和Queue。P1發(fā)送的消息最終會(huì)被C1消費(fèi)。基本的通信流程大概如下所示:

      1. P1生產(chǎn)消息,發(fā)送給服務(wù)器端的Exchange。
      2. Exchange收到消息,根據(jù)ROUTINKEY,將消息轉(zhuǎn)發(fā)給匹配的Queue1。
      3. Queue1收到消息,將消息發(fā)送給訂閱者C1。
      4. C1收到消息,發(fā)送ACK給隊(duì)列確認(rèn)收到消息。
      5. Queue1收到ACK,刪除隊(duì)列中緩存的此條消息

      Consumer收到消息時(shí)需要顯式的向rabbit broker發(fā)送basic.ack消息或者consumer訂閱消息時(shí)設(shè)置auto_ack參數(shù)為true。在通信過(guò)程中,隊(duì)列對(duì)ACK的處理有以下幾種情況:

      1. 如果consumer接收了消息,發(fā)送ack,rabbitmq會(huì)刪除隊(duì)列中這個(gè)消息,發(fā)送另一條消息給consumer。
      2. 如果cosumer接受了消息, 但在發(fā)送ack之前斷開連接,rabbitmq會(huì)認(rèn)為這條消息沒(méi)有被deliver,在consumer在次連接的時(shí)候,這條消息會(huì)被redeliver。
      3. 如果consumer接受了消息,但是程序中有bug,忘記了ack,rabbitmq不會(huì)重復(fù)發(fā)送消息。
      4. rabbitmq2.0.0和之后的版本支持consumer reject某條(類)消息,可以通過(guò)設(shè)置requeue參數(shù)中的reject為true達(dá)到目地,那么rabbitmq將會(huì)把消息發(fā)送給下一個(gè)注冊(cè)的consumer。

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

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多