13,EasyNetQ-錯誤條件

在本節中,咱們將看看任何消息系統中可能出現的各類錯誤狀況,並查看EasyNetQ如何處理它們。windows

1,個人訂閱服務死亡緩存

你已經寫了一個訂閱了個人NewCustomerMessage的windows服務。 若是服務失敗會發生什麼? 爲了提升效率,EasyNetQ爲訂閱實現了一個內部內存隊列。 消息從RabbitMQ經過網絡接收並放置在該隊列中。 單個訂閱線程將消息依次從隊列中取出,並將它們傳遞給您提供的回調。 一旦回調完成,EasyNetQ將「Ack」發送回RabbitMQ。 在收到'Ack'以前,消息不會從RabbitMQ隊列中刪除。 若是您的服務在處理消息時死掉,則消息(以及EasyNetQ內存隊列中的全部消息)將保留在RabbitMQ隊列中。 一旦你的服務從新鏈接,消息將被從新發送。服務器

2,個人訂閱者消息發佈速度比發佈時慢網絡

EasyNetQ使用RabbitMQ的服務質量設置將預設計數設置爲一些合理的設置(當前爲50)。 這意味着用戶的內存隊列中永遠不會有超過50條消息。 這能夠防止在訂閱應用程序中發生內存不足異常。 一旦未發出消息的計數達到此級別,RabbitMQ將中止發送它們,並將它們留在其內部隊列中。 固然,最終這個隊列會佔用RabbitMQ服務器機器上的全部磁盤空間。 您應該進行一些監測以確保在發生這種狀況以前收到警報。線程

3,個人用戶和RabbitMQ Broker之間有網絡故障設計

正如在「鏈接到RabbitMQ」一節中所描述的,EasyNetQ實現了一個延遲鏈接策略。它假定代理並不老是可用的。當您第一次使用RabbitHutch鏈接到代理時。CreateBus, EasyNetQ進入一個鏈接嘗試循環,若是在鏈接字符串中指定的地址上沒有可用的代理,您將看到「嘗試鏈接」的信息消息。用戶可使用總線訂閱。即便沒有代理,也要訂閱。訂閱細節由EasyNetQ緩存。當代理成爲可用的鏈接循環時,將創建與代理的鏈接,並建立全部緩存的訂閱。代理

一樣,當EasyNetQ與代理失去鏈接時,它將返回到鏈接循環,您將在日誌中看到「嘗試鏈接」消息。 一旦鏈接從新創建,緩存的用戶再次被建立。 這樣作的結果是,您可讓您的訂戶在網絡鏈接不可靠或您須要退出RabbitMQ代理的環境中運行。日誌

4,個人訂閱回調在消費時引起異常blog

若是您的訂閱回調引起異常,則EasyNetQ將接收正在使用的消息並將其包含在特殊的錯誤消息中。 該錯誤消息將發佈到EasyNetQ錯誤隊列(名爲EasyNetQ_Default_Error_Queue)。 您應該監視錯誤隊列中的任何消息。 錯誤消息包括從新發布原始消息所需的全部信息以及異常的類型,消息和堆棧跟蹤。 您可使用EasyNetQ.Hosepipe實用程序從新發布錯誤消息。 請參閱下面的EasyNetQ.Hosepipe一節。隊列

 

相關文章
相關標籤/搜索