亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

RabbitMq怎么確保消息不丟失

發布時間:2021-08-30 21:07:53 來源:億速云 閱讀:314 作者:chen 欄目:大數據

本篇內容主要講解“RabbitMq怎么確保消息不丟失”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RabbitMq怎么確保消息不丟失”吧!


①生產階段,生產者創建消息,經過網絡發送到rabbit服務器

②消息存儲階段,首先被發送到交換器然后經過路由算法,到達隊列,等待被拉取消費

③消費階段,消費者經過網絡從rabbit服務器拉取消息進行消費 

RabbitMq怎么確保消息不丟失


這三個階段都有可能消息丟失,下面一一分析。

消息存儲階段

正常情況下,我們使用   BasicPublish   方法發送消息到交換器上然后路由到隊列上面,消費者還沒進行消費,此時服務器重啟了(隊列、交換器使用默認的創建方式),會發生什么?答案是:消息丟失。原因很簡單:消息在內存中,沒有刷盤,并且,他們默認是非持久化的,服務重啟之后,它們需要重新創建,消息自然就丟失!  
還好,Rabbit提供持久化的機制,隊列、交換器創建的時候,   durable   屬性設置為true,同時消息投遞模式(   delivery mode   )設置為2,則消息標記成持久化。這樣可以避免服務器重啟消息丟失的情況。  

RabbitMq怎么確保消息不丟失

發送階段

由于發布操作不返回任何信息給生產者,那你怎么知道服務器是否已經持久化了持久消息到硬盤呢?服務器可能在把消息寫入磁盤前就宕機了,消息因此而丟失!  

 有。)

Rabbit提供兩中解決方案,   事務   ,但是性能會大打折扣,而且會使生產者應用程序產生同步。生產環境一般不會采用;另外一種方案是   確認模式   。也很簡單,消息路由給所有匹配的訂閱隊列中,之后會異步的告之生產者。使用channel.ConfirmSelect()方法,使信道開啟確認模式。然后注入兩個回調函數,ack和nack事件。  
channel.BasicAcks += (sender, ev) =>                {                    Console.WriteLine("消息已經確認收到" + ev.DeliveryTag);
               };
               channel.BasicNacks += (sender, ev) =>                {                    Console.WriteLine("消息未確認" + ev.DeliveryTag);                };
 


消費階段

你可能會問,消費端消息怎么會丟失呢?Rabbitmq提供自動和手動確認消息,然后消息從隊列中移除。如果   autoAck   為true,自動確認模式,服務器就會在消息發給消費端后自動將其出隊。如果因為某些原因連接中斷了,或者你的消費端應用發生了故障,那么消息就會丟失!  

通過把AutoAck設置為false,手工確認,告知服務器,消息已經處理了,可以進行消息出隊刪除。

 

 channel.BasicConsume(queue: queueName,                                     autoAck: false,                                     consumer: consumer);
 
 consumer.Received += (model, ea) =>                {                    //dosometing                    channel.BasicAck(ea.DeliveryTag, false);//確認                };
 

小結:如果做了以上的處理,那么消息就不會跟你躲貓貓了。這里有性能的問題,消息持久化,是要刷到磁盤上的會影響投遞速度,并且消息確認也會影響到消息投遞速度。不基本上能夠滿足需求了。如果不能滿足性能需求,可以使用其他方法,比如 在每次發送消息的時候,都包含應答隊列的名稱,這樣消費者就可以回發應答以確認接受到了。如果消息應答未在合理時間范圍內到達,生產者就重新發送消息。

到此,相信大家對“RabbitMq怎么確保消息不丟失”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宕昌县| 临高县| 汝南县| 时尚| 湟中县| 徐闻县| 舟山市| 墨竹工卡县| 武陟县| 文昌市| 禄劝| 汤原县| 镇康县| 吉木萨尔县| 巫山县| 耿马| 晋中市| 伊金霍洛旗| 宣恩县| 资兴市| 中江县| 屯昌县| 永顺县| 桂阳县| 沭阳县| 密山市| 社会| 南溪县| 利津县| 盐山县| 吉隆县| 获嘉县| 兴城市| 新乐市| 光山县| 曲沃县| 凯里市| 杭锦后旗| 辽宁省| 汝城县| 连山|