您好,登錄后才能下訂單哦!
本篇內容主要講解“RabbitMq怎么確保消息不丟失”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“RabbitMq怎么確保消息不丟失”吧!
①生產階段,生產者創建消息,經過網絡發送到rabbit服務器
②消息存儲階段,首先被發送到交換器然后經過路由算法,到達隊列,等待被拉取消費
③消費階段,消費者經過網絡從rabbit服務器拉取消息進行消費
這三個階段都有可能消息丟失,下面一一分析。
消息存儲階段
發送階段
有。)
channel.BasicAcks += (sender, ev) =>
{
Console.WriteLine("消息已經確認收到" + ev.DeliveryTag);
};
channel.BasicNacks += (sender, ev) =>
{
Console.WriteLine("消息未確認" + ev.DeliveryTag);
};
消費階段
通過把AutoAck設置為false,手工確認,告知服務器,消息已經處理了,可以進行消息出隊刪除。
channel.BasicConsume(queue: queueName, autoAck: false, consumer: consumer);
consumer.Received += (model, ea) => { //dosometing channel.BasicAck(ea.DeliveryTag, false);//確認 };
小結:如果做了以上的處理,那么消息就不會跟你躲貓貓了。這里有性能的問題,消息持久化,是要刷到磁盤上的會影響投遞速度,并且消息確認也會影響到消息投遞速度。不基本上能夠滿足需求了。如果不能滿足性能需求,可以使用其他方法,比如 在每次發送消息的時候,都包含應答隊列的名稱,這樣消費者就可以回發應答以確認接受到了。如果消息應答未在合理時間范圍內到達,生產者就重新發送消息。
到此,相信大家對“RabbitMq怎么確保消息不丟失”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。