青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2017年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456


專注即時(shí)通訊及網(wǎng)游服務(wù)端編程
------------------------------------
Openresty 官方模塊
Openresty 標(biāo)準(zhǔn)模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉(zhuǎn)載,并在文章開頭給出了原文出處,如有再轉(zhuǎn),敬請(qǐng)保留相關(guān)信息,這是大家對(duì)原創(chuàng)作者勞動(dòng)成果的自覺尊重!!如為您帶來不便,請(qǐng)于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊(cè)

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220950
  • 排名 - 117

最新評(píng)論

閱讀排行榜

http://blog.csdn.net/mra__s__/article/details/55011530

理解消息通信

一、       消息通信的概念--消費(fèi)者、生產(chǎn)者和代理

生產(chǎn)者創(chuàng)建消息,消費(fèi)者接受這些消息。你的應(yīng)用程序可以作為生產(chǎn)者,向其他應(yīng)用程序發(fā)送消息,或者作為一個(gè)消費(fèi)者,接收消息。也可以在兩者之間進(jìn)行切換。不過在此之前,它必須先建立一條信道(channel)。不論你是發(fā)布消息、訂閱隊(duì)列或是接受消息都是通過信道完成。

二、       AMQP元素--交換器、隊(duì)列和綁定

從概念上講,AMQP消息路由必須有三部分:交換器、隊(duì)列和綁定。生產(chǎn)者把消息發(fā)布到交換器上;消息最終到達(dá)隊(duì)列,并被消費(fèi)者接受;綁定決定了消息如何從路由器路由到特定的隊(duì)列。在研究交換器和綁定之前,需要先理解隊(duì)列的概念和工作原理。如下圖:


消費(fèi)者通過以下兩種方式從特定隊(duì)列中接收消息:

(1) 通過AMQP的base.consumer命令訂閱。這樣做會(huì)將信道置為接收模式,直到取消對(duì)隊(duì)列的訂閱為止。

(2) 有些時(shí)候,你只想從隊(duì)列中獲取單條消息而不是持續(xù)訂閱。向隊(duì)列請(qǐng)求單條消息是通過AMQP的base.get命令實(shí)現(xiàn)的。大致上講,base.get命令會(huì)訂閱消息,獲取單條消息,然后取消訂閱。消費(fèi)者理應(yīng)始終使用base.consumer來實(shí)現(xiàn)高吞吐量。

 

A: 當(dāng)有多個(gè)消費(fèi)者訂閱到同一個(gè)隊(duì)列上是,消息是如何發(fā)布的:

Q: 隊(duì)列收到的消息將以循環(huán)(round-robin)的方式發(fā)送給消費(fèi)者,每條消息只會(huì)發(fā)送給一個(gè)消費(fèi)者。消息確認(rèn)接收機(jī)制:消費(fèi)者必須通過AMQP的base.ask命令顯式的向RabbitMQ發(fā)送一個(gè)確認(rèn)消息,或者在訂閱到隊(duì)列的時(shí)候就將base.ask參數(shù)設(shè)置成true。消費(fèi)者對(duì)消息的確認(rèn)和告訴生產(chǎn)者消息已經(jīng)被接收這兩件事毫不相關(guān)。

如何創(chuàng)建隊(duì)列。生產(chǎn)者和消費(fèi)者都能使用AMQP的base.declare命令創(chuàng)建隊(duì)列。如果消費(fèi)者在同一條信道上訂閱了另一條對(duì)列的話,就無法再聲明隊(duì)列了。則必須先取消隊(duì)列,將信道置為“傳輸”模式。

隊(duì)列設(shè)置了一些有用的參數(shù):

1.exlusion--將參數(shù)設(shè)置成true后隊(duì)列將變?yōu)樗接校拗埔粋€(gè)隊(duì)列中只能有一個(gè)消費(fèi)者。

2.auto-delete--將參數(shù)設(shè)置為true后,最后一個(gè)消費(fèi)者取消訂閱之后隊(duì)列將自動(dòng)移除。

聯(lián)合:交換器和綁定。

Q: 消息是如何到達(dá)隊(duì)列的呢?

A: 路由鍵規(guī)則來指定消息從路由器到哪個(gè)隊(duì)列。

Q: 那它是如何處理投遞到多個(gè)隊(duì)列的情況呢?

A: 協(xié)議中定義的不同類型交換器發(fā)揮了作用。一共四種類型:direct、fanout、topic和header。

direct:如果路由鍵匹配的話,消息就被投遞到對(duì)應(yīng)的隊(duì)列。

base_publish($msg,'默認(rèn)交換器','隊(duì)列名稱');


fanout:當(dāng)你發(fā)送一條消息到fanout路由器時(shí),他會(huì)把消息投遞給所有附加在此交換器上的隊(duì)列。可以輕而易舉地添加應(yīng)用程序的功能。

base_publish($msg,'logs-exchange','error.msg-inbox');


topic:跟direct比較相像,有一些通配規(guī)則。單個(gè)“.”把路由分成幾部分,“*”匹配特定位置的任意文本,“#”匹配所有規(guī)則。

queue_bind('msg-inbox-errors','logs-exchange','error.msg-inbox');

queue_bind('msg-inbox-errors','logs-exchange','*.msg-inbox');

queue_bind('all-logs','logs-exchange','#');

三、       虛擬主機(jī)

虛擬主機(jī)vhost是AMQP概念的基礎(chǔ),你必須在連接時(shí)進(jìn)行指定。RabbitMQ包含了開箱即用的默認(rèn)虛擬主機(jī)"/",因此使用非常簡便。vhost之間是絕對(duì)隔離,保障了隊(duì)列和交換機(jī)的安全性,因此消息路由的組件也無法進(jìn)行交互。

rabbitmqctl add_vhost[vhost_name]

rabbitmqctl delete _vhost[vhost_name]

四、       消息持久化

重啟rabbitmq服務(wù)器后,那些隊(duì)列和交換器就都消失了,原因在于每個(gè)隊(duì)列和交換器的durable屬性,該屬性默認(rèn)情況為false。如果需要持久化,單純將隊(duì)列和交換器的durable屬性設(shè)置為true是不夠滴。消息發(fā)布之前,通過把它的“投遞模式”(delivery mode)選項(xiàng)設(shè)置為2來把消息標(biāo)記為持久化。代價(jià)則是消耗性能,雖然重啟RabbitMQ服務(wù)器后隊(duì)列和交換器能恢復(fù)。

五、       一條消息經(jīng)歷從生產(chǎn)者到消費(fèi)者的生命周期

發(fā)布者需要完成的任務(wù):1.連接到RabbitMQ。2.獲取信道。3.聲明交換機(jī)。4.創(chuàng)建消息。5.關(guān)閉消息。6.關(guān)閉信道。7.關(guān)閉連接。

消費(fèi)者需要執(zhí)行的任務(wù):1.連接到RabbitMQ。2.獲取信道。3.聲明交換機(jī)。4.聲明隊(duì)列。5.把隊(duì)列和交換機(jī)綁定起來。6.消費(fèi)消息。7.關(guān)閉信道。8.關(guān)閉連接。

使用發(fā)送方確認(rèn)模式來確認(rèn)投遞。

運(yùn)行和管理RabbitMQ

一、       服務(wù)器管理—啟動(dòng)和停止節(jié)點(diǎn)

運(yùn)行子系統(tǒng):rabbitmq安裝目錄下找到./sbin目錄,運(yùn)行./rabbitmq-server。通過日志查看運(yùn)行情況,日志目錄/var/log/rabbitmq/下。以守護(hù)程序的方式在后臺(tái)運(yùn)行:./rabbitmq-server detached,至此rabbitmq服務(wù)啟動(dòng)成功。

當(dāng)運(yùn)行rabbitmq連接到控制臺(tái)時(shí),你按下CTRL+C組合鍵后你猜是哪個(gè)..

在rabbitmq安裝目錄下運(yùn)行./sbin/rabbitmqctl stop來干凈地關(guān)閉。

rabbitmq配置文件目錄在/etc/rabbitmq/rabbitmq.config。

二、       權(quán)限配置

RabbitMQ權(quán)限工作原理:用戶可以為連接到RabbitMQ主機(jī)的應(yīng)用程序設(shè)計(jì)不同級(jí)別的權(quán)限(讀、寫和“/”或配置)。

管理用戶:在RabbitMQ中,用戶是訪問控制的基本單元。針對(duì)一到多個(gè)vhost,其可以被賦予不同級(jí)別的訪問權(quán)限,并使用標(biāo)準(zhǔn)的用戶名/密碼對(duì)來認(rèn)證用戶。對(duì)用的增加、刪除以及列出列表,都非常簡單。這些操作都是通過rabbitmqctl完成的。

添加用戶:rabbitmqctl add_user username password

刪除用戶:rabbitmqctl delete_user username

用戶列表:rabbitmqctl list_users


設(shè)置權(quán)限:rabbitmqctl set_permissions –p sycamore \ cashing-tier “.*” “.*” “.*”

–p sycamore:告訴set_permissions條目應(yīng)該應(yīng)用在哪個(gè)vhost上面。

cashing-tier:被授予權(quán)限的用戶。

“.*” “.*” “.*”:這些是授予的權(quán)限。這些值分別映射到配置、寫和讀。

移除權(quán)限:rabbbimqctl clear_permissions –p sycamore cashing-tier

權(quán)限列表:rabbitmqctl list_user_permissions cashing-tier

三、       使用統(tǒng)計(jì)

其中經(jīng)常看到的-p選項(xiàng),它指明了虛擬主機(jī)和路徑信息。

rabbitmqctl list_queues -p sycamore 列出虛擬主機(jī)為sycamore的隊(duì)列列表

list_queues [-p Vhost_Path] [<QueueInfoItem>]

rabbitmqctl list_exchanges

list_exchanges  [ExchangeInfoItem]

rabbitmqctl list_bindings

理解RabbitMQ日志,LOG_BASE=/var/log/rabbitmq

四、       RabbitMQ和Erlang問題疑難解答

由badrpc、nodedown和其他Erlang引起的問題

1. Erlang Cookie

使用rabbitmqctl命令時(shí)常出現(xiàn)一些莫名錯(cuò)誤。先理解下rabbitmqctl的工作原理。rabbitmqctl命令先啟動(dòng)Erlang節(jié)點(diǎn),并從那個(gè)使用Erlang分布式系統(tǒng)嘗試連接RabbitMQ節(jié)點(diǎn)。要完成這項(xiàng)工作需要兩樣?xùn)|西:合適的Erlang Cookie和合適的主機(jī)名稱。

Q: 那么什么是Erlang Cookie呢?

A: Erlang節(jié)點(diǎn)通過交換作為秘密令牌的Erlangcookie以獲得認(rèn)證。Erlang將令牌存儲(chǔ)于home目錄下的.erlang.cookie文件中

2. Erlang節(jié)點(diǎn)

當(dāng)你啟動(dòng)Erlang節(jié)點(diǎn)時(shí),你可以給它兩個(gè)互斥的節(jié)點(diǎn)名選項(xiàng),name和sname。

當(dāng)你想讓rabbitmqctl能夠連上RabbitMQ時(shí),你必須使得這些參數(shù)兩邊都能匹配(rabbit@hostname)。

3. Mnesia和主機(jī)名

RabbitMQ使用Mnesia存儲(chǔ)隊(duì)列、交換器、綁定等信息。RabbitMQ啟動(dòng)時(shí)做的一件事就是啟動(dòng)Mnesia數(shù)據(jù)庫。如果啟動(dòng)Mnesia失敗,則RabbitMQ也會(huì)跟著失敗。而導(dǎo)致Mnesia失敗的原因大致有二:第一個(gè)也是最常見的MNESIA_BASE目錄的權(quán)限問題。另一個(gè)常見問題是讀取表格失敗。如果主機(jī)名更改了,或是服務(wù)器運(yùn)行在集群模式下,無法在啟動(dòng)的時(shí)候連接到其他節(jié)點(diǎn),都會(huì)導(dǎo)致啟動(dòng)失敗。

4. Erlang故障排除技巧

以test作為節(jié)點(diǎn)名啟動(dòng)Eralng節(jié)點(diǎn):erl  sname  test。

執(zhí)行node()函數(shù)會(huì)展示--Erlang中方括號(hào)為界的列表--你連接上的節(jié)點(diǎn)列表。

通過使用rpc:call,同時(shí)提供節(jié)點(diǎn)、模塊、函數(shù)和參數(shù)作為入?yún)ⅲ憧梢栽谶h(yuǎn)程rabbit上執(zhí)行其他參數(shù)以獲取不同的信息。

解決Rabbit相關(guān)問題:編碼與模式

一、       面向消息通信來設(shè)計(jì)應(yīng)用程序

1. 異步狀態(tài)思維(分離請(qǐng)求和動(dòng)作)

2. 提供擴(kuò)展性:沒有負(fù)載均衡器的世界

3. 使用AMQP來解耦應(yīng)用程序最大好處:免費(fèi)的API,語言不會(huì)約束消息通信。

二、       消息通信模式

解決耗時(shí)的任務(wù)和整合用不同語言編寫的應(yīng)用程序。這兩個(gè)看似有不同的問題,但卻有著共同的本質(zhì):解耦請(qǐng)求和操作。或者換種說法,這兩個(gè)問題均需要從同步編程模式轉(zhuǎn)向異步編程模式。

三、       發(fā)后即忘模型

匹配該模式的兩種一般類型的任務(wù)

1. 批處理(batchprocessing)--針對(duì)大型數(shù)據(jù)集合的工作和轉(zhuǎn)換。這種類型的任務(wù)可以構(gòu)建為單一的任務(wù)請(qǐng)求,或者多個(gè)任務(wù)對(duì)數(shù)據(jù)集合的獨(dú)立部分進(jìn)行操作。

2. 通知(notifications)--對(duì)發(fā)生事件的描述。內(nèi)容可以是消息的日志,也可以是真實(shí)的報(bào)告通知給另一個(gè)程序或者是管理員。

這兩個(gè)例子符合我們之前提到的兩種類別:第一個(gè)是告警框架(發(fā)送告警)。另一個(gè)是將單張圖片上傳并將其轉(zhuǎn)換成眾多圖片格式和尺寸(并行處理)。

四、       用RabbitMQ實(shí)現(xiàn)RPC

1. 私有隊(duì)列和確認(rèn)發(fā)送。

2. 使用reply_to來實(shí)現(xiàn)簡單的jsonRPC

集群并處理失敗

一、       RabbitMQ集群架構(gòu)

RabbitMQ最優(yōu)秀的功能之一就是其內(nèi)建集群。同時(shí)能夠?qū)⒓涸?分鐘內(nèi)構(gòu)建并運(yùn)行起來。

RabbitMQ內(nèi)建集群的設(shè)計(jì)用于完成兩個(gè)目標(biāo):允許消費(fèi)者和生產(chǎn)者在Rabbit節(jié)點(diǎn)奔潰的情況下繼續(xù)運(yùn)行,以及通過添加更多的節(jié)點(diǎn)來線性擴(kuò)展消息通信吞吐量。

Q: RabbitMQ是如何記錄你所有使用過的各種基礎(chǔ)構(gòu)件,同時(shí)他們又如何裝配成一個(gè)消息通信服務(wù)器的呢?

A: RabbitMQ會(huì)始終記錄以下四種類型的內(nèi)部元數(shù)據(jù):

1. 隊(duì)列元數(shù)據(jù)--隊(duì)列名稱和屬性(是否可持久化,是否自動(dòng)刪除)

2. 交換器元數(shù)據(jù)--交換器名稱、類型和屬性(可持久化等)

3. 綁定元數(shù)據(jù)--一張簡單的表格展示了如何將消息路由到隊(duì)列

4. vhost元數(shù)據(jù)--為vhost內(nèi)的隊(duì)列、交換器和綁定提供命名空間和安全屬性。

我們深入到集群節(jié)點(diǎn)和他們?nèi)绾未鎯?chǔ)元數(shù)據(jù)前,首先理解在集群環(huán)境中隊(duì)列和交換器的行為。

1. 集群中的隊(duì)列。

2. 分布交換器。

3. 是內(nèi)存節(jié)點(diǎn)還是磁盤節(jié)點(diǎn)。

二、       在你的筆記本上搭建集群

在筆記本上創(chuàng)建三個(gè)節(jié)點(diǎn),然后將三個(gè)節(jié)點(diǎn)集群,具體操作可以參考之前兩篇文章。

三、       使用物理服務(wù)器創(chuàng)建集群

分布在不同的服務(wù)器上創(chuàng)建不同的節(jié)點(diǎn),將不同節(jié)點(diǎn)進(jìn)行集群。

四、       升級(jí)集群節(jié)點(diǎn)

獨(dú)立系統(tǒng)中升級(jí)節(jié)點(diǎn)只需解壓新版本,然后運(yùn)行即可,舊的數(shù)據(jù)也將會(huì)保留。如果是集群節(jié)點(diǎn),需要備份配置信息后,關(guān)閉所有生產(chǎn)者等待消費(fèi)者消費(fèi)完隊(duì)列中的所有信息(rabbitmqctl觀察隊(duì)列狀態(tài))。現(xiàn)在,關(guān)閉節(jié)點(diǎn),并解壓新版本到RabbitMQ到現(xiàn)有的安裝目錄。

五、       與鏡像隊(duì)列一起工作

當(dāng)加入鏡像隊(duì)列后,信道負(fù)責(zé)將消息路由到合適的隊(duì)列。


鏡像隊(duì)列是如何影響事務(wù)和發(fā)送方確認(rèn)模式的?

1. 鏡像隊(duì)列主拷貝故障時(shí),從拷貝變成主拷貝。

2. 如果鏡像隊(duì)列失去一個(gè)從節(jié)點(diǎn)的話,則附加在鏡像隊(duì)列的任何消費(fèi)者都不會(huì)注意到這一點(diǎn)。

3. 如果客戶端庫不能支持消費(fèi)者取消通知的話,你應(yīng)該避免使用鏡像隊(duì)列。

從故障中恢復(fù)

一、       理解負(fù)載均衡

負(fù)載均衡將服務(wù)器集群IP封裝,提供暴露成統(tǒng)一接口。通過將負(fù)載均衡器放置在Rabbit的前端,你就可以讓它來處理節(jié)點(diǎn)選擇、故障服務(wù)器檢測(cè)以及負(fù)載分布這些復(fù)雜的事情了。


二、       安裝并配置HAProxy來為Rabbit做負(fù)載均衡

選擇使用HAProxy的原因:它是免費(fèi)的,而且非常可靠,并且為各種站點(diǎn)處理高負(fù)載,例如:StackOverFlow。同時(shí),它可以運(yùn)行在幾乎所有的基于UNIX的平臺(tái)上,并且非常容易配置。

1. 安裝HAProxy

2. 配置HAProxy

以上兩步自己度娘。

三、       重連并從故障中恢復(fù)

現(xiàn)在開發(fā)系統(tǒng)上運(yùn)行著負(fù)載均衡器,我們準(zhǔn)備深入探索如何使用它來為消息通信應(yīng)用程序植入故障轉(zhuǎn)移和快速恢復(fù)的能力。

1. 如果我重新連接到新的服務(wù)器,那么我的信道以及其上的所有消費(fèi)循環(huán)會(huì)怎樣呢?它們現(xiàn)在都失效了。你必須對(duì)它們進(jìn)行重建。

2. 當(dāng)我進(jìn)行重連的時(shí)候,我能否假設(shè)所有的交換器、隊(duì)列和綁定仍然存在于集群之中?我能否重連之后立即開始從隊(duì)列消費(fèi)呢?

Warren和Shovel:故障轉(zhuǎn)移和復(fù)制

一、       理解主/備方式(warren)

集群迫使你不得不在以下兩者之間做權(quán)衡:所有節(jié)點(diǎn)表現(xiàn)得像獨(dú)立單元來分布負(fù)載的優(yōu)點(diǎn),但是在故障節(jié)點(diǎn)恢復(fù)前無法使用可持久化隊(duì)列的缺點(diǎn)。這正是warren和Shovel的用武之地。

二、       使用負(fù)載均衡器創(chuàng)建warren

基于warren的負(fù)載均衡器的HAProxy配置。基于負(fù)載均衡器來做故障轉(zhuǎn)移,最重要的是可以確保當(dāng)故障轉(zhuǎn)移發(fā)生時(shí),你無須擔(dān)心RabbitMQ無法在備用節(jié)點(diǎn)啟動(dòng),因?yàn)樗呀?jīng)運(yùn)行了。由于Rabbit始終在主節(jié)點(diǎn)和備用節(jié)點(diǎn)上運(yùn)行,因此你們可以始終對(duì)它們進(jìn)行監(jiān)控。如果備機(jī)在派上用場(chǎng)之前就變?yōu)椴豢捎玫脑挘阍诘谝粫r(shí)間就能發(fā)現(xiàn)。這通過使用共享存儲(chǔ)warren是無法做到的。

三、       使用Shovel構(gòu)建遠(yuǎn)距離復(fù)制

在掌握了集群和warren之后,你就能處理故障并在數(shù)據(jù)中心之上進(jìn)行擴(kuò)展了,但是當(dāng)你需要在不同的數(shù)據(jù)中心的Rabbit間復(fù)制消息時(shí),改怎么辦呢?這時(shí),我們就需要Shovel了。

1. 給Rabbit裝備Shovel:Shovel插件介紹。

2. 安裝Shovel

3. 配置并運(yùn)行Shovel

從Web端管理RabbitMQ

一、       Managent插件相對(duì)于rabbitmqctl腳本的優(yōu)勢(shì)

方便、簡潔、功能齊全、瀏覽多方面同時(shí)監(jiān)測(cè)。

二、       啟用RabbitMQ Management插件

rabbitmq-plugins  enable  rabbitmq-management

三、       Management插件功能

四、       從Web控制臺(tái)來管理用戶、隊(duì)列和交換器

在web控制臺(tái)上做如下操作:(具體結(jié)合界面應(yīng)用)

1. 創(chuàng)建用戶

2. 管理用戶的權(quán)限

3. 列出隊(duì)列信息

4. 創(chuàng)建隊(duì)列

五、       Management插件REST接口介紹

1. 通過使用REST API,你可以輕松自動(dòng)化那些到目前為止只能通過圖形化界面完成的任務(wù)。

2. CLI管理:一種更簡潔的方式。

3. 安裝rabbitmqadmin腳本。

4. 應(yīng)用rabbitmqadmin腳本。

使用REST API控制Rabbit

一、       Rabbit REST API的限制和功能

不管用API創(chuàng)建隊(duì)列還是設(shè)置權(quán)限,每當(dāng)使用PUT或POST動(dòng)作的時(shí)候,都需要將函數(shù)參數(shù)編碼為JSON格式的哈希表,然后添加到請(qǐng)求正文中。你可以通過瀏覽器訪問http://localhost:55672/api來查看目前大多數(shù)(以及完整的)API列表和支持的HTTP動(dòng)作。

二、       訪問消息通信數(shù)據(jù)統(tǒng)計(jì)和計(jì)數(shù)器

Rabbit Management API使得你可以在任何能夠訪問網(wǎng)絡(luò)的地方監(jiān)控并控制Rabbit。具體詳情看此書,代碼來控制的。

三、       自動(dòng)化創(chuàng)建用戶和虛擬主機(jī)

我們?cè)诓渴饝?yīng)用時(shí),就使用了相似的腳本來自動(dòng)化創(chuàng)建用戶。通過構(gòu)造這段腳本,你不僅學(xué)習(xí)了如何使用Management API來展示條目,還學(xué)習(xí)了如何展示條目列表,以及如何創(chuàng)建和刪除這些條目。你這樣將這些概念應(yīng)用到處理其他條目/資源類型(用戶、隊(duì)列、交換器、連接、權(quán)限等)。具體腳本看此書。

監(jiān)控

一、       編寫Nagios健康檢測(cè)的基礎(chǔ)

Nagios健康檢測(cè)是一個(gè)獨(dú)立程序,它在運(yùn)行時(shí)監(jiān)控服務(wù)并在程序停止運(yùn)行時(shí)退出代碼來指示服務(wù)的健康狀態(tài)。從技術(shù)上來講,你甚至不需要Nagios來運(yùn)行健康檢測(cè)--你可以在任何時(shí)候通過命令行執(zhí)行并手工觀測(cè)輸出。Nagios健康檢測(cè)可以用任何語言編寫,可以是Python程序,甚至是BASE腳本。

二、       使用AMQP和REST API來監(jiān)控Rabbit內(nèi)部狀態(tài)

構(gòu)建的AMQP健康檢測(cè),當(dāng)下列任務(wù)條件之一為真時(shí),該檢測(cè)程序會(huì)返回一個(gè)critical狀態(tài)

1. RabbitMQ沒有響應(yīng)TCP連接。

2. 當(dāng)發(fā)送AMQP命令時(shí),Pika在接收到響應(yīng)之前超時(shí)了。

3. 當(dāng)構(gòu)造AMQP信道時(shí),遇到了協(xié)議錯(cuò)誤。

僅當(dāng)這些狀態(tài)檢測(cè)都為false時(shí),健康檢測(cè)程序才會(huì)返回OK狀態(tài)。

基于API的健康檢測(cè),aliveness-test,顧名思義,使用三個(gè)步驟來驗(yàn)證Rabbit服務(wù)器是否健康:

1. 創(chuàng)建一個(gè)隊(duì)列來接收測(cè)試消息。

2. 用隊(duì)列名稱作為消息路由鍵,將消息發(fā)往默認(rèn)交換器。

3. 當(dāng)消息到達(dá)隊(duì)列的時(shí)候就消費(fèi)該消息;否則就報(bào)錯(cuò)。

三、       使用Rabbit可用并且能夠進(jìn)行響應(yīng)

有許多原因會(huì)致使RabbitMQ使用太多的內(nèi)存,并達(dá)到Rabbit配置的最大內(nèi)存上限。以下是最常見的幾種原因:

1. 應(yīng)用程序有缺陷,消費(fèi)消息之后忘記向RabbitMQ發(fā)回確認(rèn)消息。這在高容量環(huán)境下,會(huì)導(dǎo)致成千上萬條的消息堆積并耗盡Rabbit的內(nèi)存。

2. 應(yīng)用程序使用RabbitMQ將大型數(shù)據(jù)(譬如圖像)路由到處理節(jié)點(diǎn)。用不了多少張100MB大小的圖像就可以將只有8GB內(nèi)存大小的服務(wù)器內(nèi)存耗盡。

3. 使用了最新RabbitMQ版本中的新功能,但是該功能有個(gè)BUG會(huì)導(dǎo)致緩慢的內(nèi)存泄漏。

四、       觀察隊(duì)列狀態(tài)以盡早檢測(cè)消費(fèi)者問題

監(jiān)控消費(fèi)者是否正確運(yùn)作的方式就是通過監(jiān)控隊(duì)列的消息總數(shù),并在總數(shù)超過設(shè)定的warning或者critical閾值時(shí)觸發(fā)警告。以下通過兩種方式來監(jiān)控隊(duì)列消息總數(shù):

1. 使用AMQP的queue_declare()命令,設(shè)置passive=true參數(shù)來重新聲明一個(gè)已存在的隊(duì)列。當(dāng)你在AMQP中聲明一個(gè)隊(duì)列時(shí),如果將passive設(shè)置為true的話,那么該命令返回的結(jié)果中將包含隊(duì)列消息的總數(shù)。

2. 利用我們的老朋友RabbitManagement API來總隊(duì)列上拉取數(shù)據(jù)統(tǒng)計(jì),其中就有隊(duì)列當(dāng)前的消息總數(shù)。

五、       檢測(cè)消息通信結(jié)構(gòu)中不合需求的配置更改

確保消費(fèi)者正常工作,檢查消息通信結(jié)構(gòu)配置問題:

1. 通過AMQP監(jiān)控隊(duì)列等級(jí)。

2. 使用REST API來監(jiān)控隊(duì)列級(jí)別。

3. 建立隊(duì)列的消息計(jì)數(shù)基準(zhǔn)經(jīng)驗(yàn)法則。

提升性能,保障安全

一、       交換器、隊(duì)列和綁定的內(nèi)存占用

根據(jù)數(shù)據(jù)顯示隊(duì)列、交換器和綁定的內(nèi)存占用很小,另一個(gè)施加在RabbitMQ上的硬性限制是每個(gè)Erlang節(jié)點(diǎn)的最大Erlang進(jìn)程數(shù)。Erlang應(yīng)用程序在整個(gè)生命周期中會(huì)多次創(chuàng)建并銷毀進(jìn)程。

二、       消息持久化和磁盤I/O

當(dāng)發(fā)布消息時(shí),你需要決定丟失其中的任何消息對(duì)你來說是否可以接受,這決定了deleverymode設(shè)置的值為1(非持久化)還是2(持久化)的問題。

在消息消費(fèi)過程中你該如何配置,加快消息投遞的設(shè)定是no-ack標(biāo)記,你可以在隊(duì)列訂閱時(shí)指明。

路由算法和綁定規(guī)則,三種不同類型的交換器:direct、fanout和topic。每種交換器類型代表了服務(wù)器實(shí)現(xiàn)的特定路由算法。綁定規(guī)則的路由鍵模式將更占用內(nèi)存。

 

本節(jié)介紹了不同的算法和消息發(fā)布訂閱設(shè)置如何影響整個(gè)系統(tǒng)的速度,以及像auto-ack模式標(biāo)記設(shè)定能在很大程度上影響系統(tǒng)性能。

三、       RabbitMQ的SSL連接及設(shè)置私鑰架構(gòu)

1. SSL證書。

2. 設(shè)置證書頒發(fā)機(jī)構(gòu)。

3. 生成根證書。

4. 生成服務(wù)器端證書。

5. 生成客戶端證書。

6. 啟用RabbitMQ的SSL監(jiān)聽。

7. 測(cè)試你的RabbitMQ SSL設(shè)置。

聰明的Rabbit:擴(kuò)展RabbitMQ

一、       安裝RabbitMQ插件

我可以通過安裝插件的方式來解決:

1. 支持AMQP以外的協(xié)議。

2. 不同的認(rèn)證機(jī)制(LDQP,自定義數(shù)據(jù)庫)。

3. 消息復(fù)制。

4. 新的交換器和路由算法。

5. 消息日志和審計(jì)。

如果你想啟用的插件不是服務(wù)器發(fā)行的一部分該怎么辦呢?首先,你得下載插件的.ez文件到RabbitMQ安裝目錄的plugins文件夾下,之后像往常一樣運(yùn)行./rabbitmq-plugins enable plugin_name命令即可。

二、       實(shí)現(xiàn)自定義交換器插件

1. 將交換器注冊(cè)到Rabbit。

2. 實(shí)現(xiàn)交換器behaviour。

3. 編譯自定義交換器。

4. 測(cè)試你的插件。

posted on 2017-12-15 14:09 思月行云 閱讀(1658) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 分布式\MQ
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            免费不卡视频| 亚洲午夜一区二区| 国产伦精品一区二区三区| 欧美亚洲日本网站| 亚洲一区二区毛片| 99re6热只有精品免费观看| 嫩草影视亚洲| 亚洲第一区在线| 欧美黑人多人双交| 欧美二区视频| 亚洲高清免费| 亚洲作爱视频| 欧美一区二区三区在线观看| 亚洲午夜精品视频| 亚洲字幕在线观看| 久久精品99国产精品日本| 欧美日韩在线不卡| 欧美成年视频| 欧美激情第一页xxx| 欧美日本亚洲视频| 欧美专区在线| 欧美影院在线| 国产精品久久久久999| 亚洲国产精品va在看黑人| 亚洲一区综合| 国产日韩欧美制服另类| 国产精品劲爆视频| 欧美黑人国产人伦爽爽爽| 欧美日本不卡| 激情成人av| 亚洲乱码国产乱码精品精可以看 | 欧美日韩国产专区| 国产精品一区二区久久| 亚洲乱码国产乱码精品精天堂| 久久成人免费| 亚洲欧美精品在线| 国产精品成人v| 一区二区久久| 在线一区视频| 国产精品中文字幕在线观看| 夜夜嗨av一区二区三区网页| 欧美二区视频| 欧美精品七区| 一区二区三区欧美| 亚洲精品在线一区二区| 欧美精品一区二区三区在线播放 | 亚洲免费观看高清完整版在线观看熊 | 亚洲精品中文字| 亚洲欧洲日本国产| 欧美激情亚洲视频| 欧美午夜电影网| 亚洲欧美日韩精品久久亚洲区 | 国产精品国产三级国产aⅴ浪潮 | 久久视频精品在线| 久久美女艺术照精彩视频福利播放| 国产欧美日韩精品a在线观看| 午夜在线观看欧美| 久久综合成人精品亚洲另类欧美| 亚洲破处大片| 午夜精品久久久久久久99热浪潮 | 国产精品大全| 国产欧美亚洲视频| 国产午夜精品理论片a级大结局| 国产精品亚洲综合色区韩国| 亚洲欧美偷拍卡通变态| 午夜在线观看免费一区| 久久综合伊人77777蜜臀| 亚洲国产va精品久久久不卡综合| 亚洲第一成人在线| 久久精品在线免费观看| 国产日产精品一区二区三区四区的观看方式| 欧美激情视频一区二区三区免费 | 欧美日韩精品免费观看| 国产亚洲一区二区精品| 日韩视频精品在线观看| 亚洲精品一区二区三区av| 久久av免费一区| 久久久av毛片精品| 国产九九精品视频| 一区二区三区不卡视频在线观看| 亚洲高清在线| 欧美jjzz| 亚洲精品国产视频| 性视频1819p久久| 亚洲国产第一页| 国产农村妇女毛片精品久久麻豆 | 亚洲男人影院| 欧美一级一区| 国产一区二区三区网站| 性欧美video另类hd性玩具| 久久成人久久爱| 亚洲人成网站精品片在线观看 | 久久精品国产亚洲aⅴ| 小黄鸭精品密入口导航| 激情亚洲成人| 欧美日韩国产综合视频在线观看中文 | 日韩午夜激情av| 欧美日韩精品一区二区在线播放 | 午夜久久一区| 日韩性生活视频| 亚洲欧美综合国产精品一区| 国产欧美一区二区精品忘忧草| 欧美在线观看网站| 亚洲激情自拍| 欧美暴力喷水在线| 欧美在线影院| 在线一区二区视频| 亚洲美女黄网| 亚洲人成7777| 亚洲国产欧美日韩另类综合| 国产精品色午夜在线观看| 欧美成人免费在线视频| 久久婷婷国产综合精品青草| 性久久久久久久| 香蕉国产精品偷在线观看不卡| 欧美国产三级| 一区二区三区精品久久久| 国产精品普通话对白| 国产精品观看| 国产一区观看| 亚洲人成高清| 午夜精品久久久久久久99水蜜桃| 亚洲性xxxx| 久久视频在线看| 99re8这里有精品热视频免费 | 久久色在线播放| 亚洲国产高清视频| 一本色道久久综合一区 | 欧美激情视频一区二区三区在线播放 | 免费日本视频一区| 国产欧美在线| 久久久夜精品| 小黄鸭视频精品导航| 久久久99国产精品免费| 一区二区三区 在线观看视| 久久综合精品国产一区二区三区| 亚洲毛片一区二区| 亚洲欧洲日本国产| 欧美另类在线播放| 欧美一区二区| 嫩草成人www欧美| 一区二区三区国产精品| 国产在线精品自拍| 久久综合色播五月| 午夜一级久久| 亚洲深夜福利视频| 久久久久久一区二区| 小黄鸭视频精品导航| 欧美暴力喷水在线| 韩国欧美一区| 91久久精品久久国产性色也91| 伊人狠狠色丁香综合尤物| 一本到高清视频免费精品| 欧美激情91| 久久都是精品| 国产欧美一区二区三区久久人妖| 一区二区三区国产精华| 欧美激情免费观看| 久久夜色精品一区| 欧美日韩中文在线| 亚洲国产精品成人综合色在线婷婷| 在线一区视频| 国产精品专区一| 亚洲性视频网站| 亚洲日本激情| 欧美激情一区| 性感少妇一区| 老司机午夜精品视频| 一本色道久久综合| 国产精品久久999| 久久久综合激的五月天| 欧美日韩亚洲高清| 亚洲少妇一区| 销魂美女一区二区三区视频在线| 国产一区二区三区成人欧美日韩在线观看| 亚洲二区在线观看| 欧美激情亚洲| 久久精品五月婷婷| 欧美日韩亚洲免费| 亚洲免费在线观看视频| 99riav久久精品riav| 国产美女高潮久久白浆| 亚洲激情成人在线| 一本色道久久综合亚洲精品按摩 | 国产亚洲人成a一在线v站| 日韩午夜av| 国内精品美女av在线播放| 亚洲电影观看| 一区二区三区在线免费视频| 亚洲欧美日韩高清| 洋洋av久久久久久久一区| 久久精品亚洲一区二区| 亚洲欧美韩国| 国产在线日韩| 亚洲视频中文| 午夜精品久久久久久久久久久| 欧美电影在线观看完整版| 亚洲欧美第一页| 亚洲成色最大综合在线| 亚洲欧美日韩一区二区|