訊息佇列RabbitMQ

2021-09-26 02:52:58 字數 1371 閱讀 4008

這是乙個很嚴肅的問題。

系統之間解除耦合,可以讓不同語言編寫的系統通訊互動

保證伺服器負載不會飆公升。高大上一點就是流量削峰。

讓程式變成非同步,提高響應速度。把費時任務放到另乙個程序或執行緒去執行。

redis實現

剛開始學習redis時,一看這個鍊錶不就是給佇列準備的嗎?

所以,一心扎進去,要寫個佇列出來。結果就看到redis作者說redis不是拿來搞這個的。

哈哈,所以就作罷。

rabbitmq

kafka

關於訊息佇列,我本身也是剛開始琢磨和入門,就不亂做對比。

一般來說kafka用於日誌。

看了官方的案例後,很是心動。就想著直接用到專案裡。

幸虧,我喜歡把文件看完。

結尾有這樣一句話:以上案例不能直接用於生產環境。額啊呀喔哦,一庫。

注意事項:

連線管理

錯誤處理

連線恢復

併發度量收集

如何保證訊息不丟失?

如果消費者使用訊息的時候,訊息未處理成功,程序死掉。

那麼訊息佇列,在消費者取資訊時直接刪除就會有丟失訊息的風險。

所以rabbitmq引入了消費者ack。即不發ack,訊息就不會刪除。

setting the fourth parameter to basic_consume to false (true means no ack) 

設定basic_consume的第四個引數為false(true意味著不發ack)

使用命令檢視沒有得到ack的訊息

sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged
如何保證ack丟失,**不出錯?

我的想法是把每個任務做標記,已經處理過的任務,再次遇到,直接返回ack。

如何保證rabbitmq掛掉,佇列訊息不丟失?

這就用到了持久化的思想,將佇列和訊息都標記為持久。

說到這裡就想到了redis的rdb和aof。哈哈

設定queue_declare的第三個引數為true

保證新發布的佇列持久。不能對已經發布的佇列更改

設定訊息持久,php版本**

$ msg = new amqpmessage(

$ data,array('delivery_mode' => amqpmessage :: delivery_mode_persistent)

);

未完待續。。。

訊息佇列Rabbitmq

rabbitmq server rabbitmqctl reset rabbitmqctl stop rabbitmqctl stop rabbitmqctl list users rabbitmqctl list queues rabbitmqctl add user user name user...

RabbitMQ訊息佇列

訊息發布接收流程 接收訊息 工作模式 publish subscribe 發布訂閱模式 發布訂閱publish subscribe和工作模式work queues的區別 routing 路由模式 區別 topics 區別 header 宣告佇列 bean queue inform sms publi...

RabbitMQ 訊息佇列

訊息佇列。我們傳送給rabbitmq的訊息最後都會到達各種queue,並且儲存在其中 如果路由找不到相應的queue則資料會丟失 等待消費者來取。它表示的是exchange與message queue是通過binding key進行聯絡的,這個關係是固定。生產者在將訊息傳送給exchange的時候,...