Python操作rabbitmq訊息佇列持久化

2022-03-01 09:11:45 字數 981 閱讀 3145

訊息佇列持久化

python操作rabbit訊息佇列的持久化,如下:

# 建立乙個名為balance的佇列,對queue進行durable持久化設為true(持久化第一步)

channel.queue_declare(queue='balance', durable=true)

# 設定訊息持久化(持久化第二步),將要傳送的訊息的屬性標記為2,表示該訊息要持久化

持久化後,即便是重啟了rabbitmq服務,期間的訊息仍存在佇列中,不會因為重啟而丟失。

延伸:(1)rabbitmq迴圈排程,將訊息迴圈傳送給不同的消費者,如:訊息1,3,5傳送給消費者1;訊息2,4,6傳送給消費者2。

(3)訊息持久化,將訊息寫入硬碟中。

rabbitmq不允許你重新定義乙個已經存在、但屬性不同的queue。需要標記訊息為持久化的 - 要通過設定 delivery_mode 屬性為 2來實現。

訊息持久化的注意點:

標記訊息為持久化並不能完全保證訊息不會丟失,儘管已經告訴rabbitmq將訊息儲存到磁碟,但rabbitmq接收到的訊息在還沒有儲存的時候,仍然有乙個短暫的時間視窗。rabbitmq不會對每個訊息都執行同步 --- 可能只是儲存到快取cache還沒有寫入到磁碟中。因此這個持久化保證並不是很強,但這比我們簡單的任務queue要好很多,如果想要很強的持久化保證,可以使用 publisher confirms。

(4)公平排程。在乙個消費者未處理完乙個訊息之前不要分發新的訊息給它,而是將這個新訊息分發給另乙個不是很忙的消費者進行處理。為了解決這個問題我們可以在消費者**中使用 channel.basic.qos ( prefetch_count = 1 ),將消費者設定為公平排程。

erlang jcl遠端除錯 rabbitmq

job control mode jcl in which jobs can be started,stopped,detached or connected.only the current job can communicate with the shell.通過jcl,我們可以遠端接入乙個er...

mac 使用docker 安裝 rabbitmq

專案要用到rabbitmq 官網說brew install 但是brew update就半天都不成功,突然想起了docker,以前用過一點點,就試著來了一下 docker search rabbitmq management docker pull rabbitmq management docke...

RabbitMQ實戰 什麼是RabbitMQ

mq 首先我們說下mq,mq全稱為message queue,即訊息佇列,是一種應用程式對應用程式的通訊方法。其特點就是一端往訊息佇列中不斷寫入訊息,而另一端則可以讀取或者訂閱佇列中的訊息。訊息 message brokers 從發布者 publishers 亦稱生產者 producers 那兒接受...