三、訊息持久化
四、總結
回到頂部
一、前言
如果我們希望即使在rabbitmq服務重啟的情況下,也不會丟失訊息,我們可以將queue與message都設定為可持久化的(durable),這樣可以保證絕大部分情況下我們的rabbitmq訊息不會丟失。當然還是會有一些小概率事件會導致訊息丟失。
回到頂部
二、佇列持久化
2.1 檢視存在的佇列和訊息數量
在windows環境下,在rabbitmq的安裝目錄/sbin下,通過rabbitmqctl.bat list_queues檢視
這邊啟動了兩個producer,分別生成兩個佇列hello 和 hello1,並且他們都有乙個訊息存在
重啟rabbitmq,模擬故障
可以看到重啟後兩個佇列都消失了
2.2 持久化佇列
我們就hello佇列持久化
在宣告佇列名稱時,持久化佇列,生產端和消費端都要 1
channel.queue_declare(queue='hello', durable=true)
我們重複上面的操作,但是給hello佇列做持久化,而hello1不做,並重啟rabbitmq
可以看到重啟後,hello佇列還在,hello1佇列消失了,但是原本hello中的一條訊息也沒有儲存下來。所以在這邊我們僅僅做到了訊息佇列的持久化,還沒有做訊息持久化。
回到頂部
三、訊息持久化
我們剛才實現了在rabbitmq崩潰的情況下,就佇列本身儲存下來,重啟後佇列還在。接下來我們要將訊息也儲存下來,即訊息的持久化 1
2345
6789
channel.basic_publish(exchange='',
routing_key='hello',
body='hello',
properties=pika.basicproperties(
delivery_mode=2, # make message persistent
))# 增加properties,這個properties 就是消費端 callback函式中的properties
# delivery_mode = 2 持久化訊息
生產端生成乙個訊息,並重啟rabbitmq
可以看到,經過佇列和訊息持久化後的hello, 在重啟的情況下,佇列和訊息都存在,沒有消失。
消費端再重啟後也能正常接收
回到頂部
四、總結
佇列持久化需要在宣告佇列時新增引數 durable=true,這樣在rabbitmq崩潰時也能儲存佇列
僅僅使用durable=true ,只能持久化佇列,不能持久化訊息
訊息持久化需要在訊息生成時,新增引數 properties=pika.basicproperties(delivery_mode=2)
rabbitmq 訊息持久化
專案案例 channel.exchangedeclare my exchange,builtinexchangetype.topic,true durable 引數設定為 truechannel.queuedeclare my queue,true,false,false maps.newhashm...
RabbitMQ訊息持久化
如果我們希望即使在rabbitmq服務重啟的情況下,也不會丟失訊息,我們可以將queue與message都設定為可持久化的 durable 這樣可以保證絕大部分情況下我們的rabbitmq訊息不會丟失。當然還是會有一些小概率事件會導致訊息丟失。在windows環境下,在rabbitmq的安裝目錄 s...
RabbitMQ 九 訊息持久化
rabbitmq系列rabbitmq 一 簡介rabbitmq 二 模式型別rabbitmq 三 簡單模式 rabbitmq 四 工作佇列模式 rabbitmq 五 發布訂閱模式 rabbitmq 六 路由模式 rabbitmq 七 主題模式 rabbitmq 八 訊息確認 rabbitmq 九 訊...