RabbitMQ訊息持久化,rabbitmq訊息

來源:互聯網
上載者:User

RabbitMQ訊息持久化,rabbitmq訊息
一、前言

  如果我們希望即使在RabbitMQ服務重啟的情況下,也不會丟失訊息,我們可以將Queue與Message都設定為可持久化的(durable),這樣可以保證絕大部分情況下我們的RabbitMQ訊息不會丟失。當然還是會有一些小機率事件會導致訊息丟失。

二、隊列持久化  2.1 查看存在的隊列和訊息數量

  在windows環境下,在rabbitmq的安裝目錄/sbin下,通過rabbitmqctl.bat list_queues查看 

  這邊啟動了兩個producer,分別產生兩個隊列hello 和 hello1,並且他們都有一個訊息存在

  重啟rabbitmq,類比故障

  可以看到重啟後兩個隊列都消失了

  2.2 持久化隊列

  我們就hello隊列持久化

  在聲明隊列名稱時,持久化隊列,生產端和消費端都要

channel.queue_declare(queue='hello', durable=True)

  我們重複上面的操作,但是給hello隊列做持久化,而hello1不做,並重啟rabbitmq

  可以看到重啟後,hello隊列還在,hello1隊列消失了,但是原本hello中的一條訊息也沒有儲存下來。所以在這邊我們僅僅做到了訊息佇列的持久化,還沒有做訊息持久化。

三、訊息持久化

  我們剛才實現了在rabbitmq崩潰的情況下,就隊列本身儲存下來,重啟後隊列還在。接下來我們要將訊息也儲存下來,即訊息的持久化

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, 在重啟的情況下,隊列和訊息都存在,沒有消失。

  消費端再重啟後也能正常接收

  

 

四、總結

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.