欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

RabbitMQ如何通過持久化保證消息99.99%不丟失?

吉茹定2年前17瀏覽0評論

當下主流的消息系統有RabbitMQ、RocketMQ、ActiveMQ等,而RabbitMQ是基于Erlang開發,無論是并發、延時表現都很好。

RabbitMQ消息可靠性是靠什么實現的?

消息可靠性是RabbitMQ的一大特點,RabbitMQ靠什么實現消息可靠性的呢?其實就是通過消息持久化來實現的,這樣就避免了服務異常(重啟、宕機)下消息和隊列丟失的風險。

消息持久化是指RabbitMQ將內存中的數據(交換器Exchange、隊列Queue、消息Message)落地到硬盤中存儲,以防止異常情況導致內存中的數據丟失。

RabbitMQ如何實現消息持久化?

RabbitMQ中不同數據持久化方式是不同的,主要有:

1、交換器(Exchange)的持久化

交換器Exchange若丟失會影響后續消息的寫入,我們在創建Exchange時需要指定durable為true表示持久化。

2、隊列(Queue)的持久化

在上面第一步操作中,在創建交換器時即使設置了durable為true后,Exchange不會丟失,但是里面的隊列依舊會丟失。如何保證隊列持久化呢?同樣是在創建隊列時指定durable為true即可。

3、消息(Message)的持久化

上面兩步操作后,在重啟RabbitMQ后,雖然Exchange和Queue不會丟失,但是Queue里的消息是會丟失的,那如何保證消息持久化不丟失呢?我們設置消息投遞模式(deliveryMode)為2即代表消息持久化。

消息持久化并不能100%保證數據不丟失

當我們將交換器/隊列/消息都設置了持久化依舊不能100%保證數據不會丟失。這其實很好理解,內存中的數據寫入硬盤是要時間的,突然斷電、宕機重啟等情況時消息可能沒來得及落地,那么這些消息就有丟失的可能。

消息持久化會帶來性能問題

我們知道消息持久化是將內存中的數據寫入硬盤中,但硬盤的讀寫速度遠不如內存,所以開啟消息持久化后會影響RabbitMQ的性能。

以上就是我的觀點,對于這個問題大家是怎么看待的呢?歡迎在下方評論區交流~我是科技領域創作者,十年互聯網從業經驗,我了解更多科技知識!