關於延遲隊列實現(delay queue)

首先經常有人問,KAFKA有實現消息隊列延遲消費的功能嗎?

答案是否定的。但是,我們可以通過一些方法變通一下,也是可以實現延遲消費。

第一種:

如果你消費時間不是太複雜,甚至是固定的,那麼你可以在producer端根據不同的延遲消費邏輯把不同的消息放到對應的topic裏面,然後consumer就可以不顧producer端,直接根據不同的延遲邏輯去消費對應的topic。

第二種:

由於消息隊列的作用從根本上爲了解決併發消息的爆發引起的問題,所以利用KAFKA 進行有效的隊列保存,那麼我們就利用他這個機制,使用一個RDBMS(比如MYSQL)進行統一消費,然後客戶再統一對RDBMS庫進行條件掃描,比如每5秒掃描一次,獲取對應的延遲消息進行消費處理。

當然如果你的架構確實需要這麼一個有延遲隊列的功能,那麼建議使用其他MQ系統。比如RabbitMQ(參考:https://blog.csdn.net/dh554112075/article/details/90597649 )

關於rabbitMQ,他最簡單的方法就是使用一個插件來實現(rabbitmq-delayed-message-exchange)https://github.com/rabbitmq/rabbitmq-delayed-message-exchange

但是這個有一點要注意的地方,使用插件時發送到隊列的消息數量在web管理界面不可見,但不影響正常功能使用。因爲這個插件目前還是處於實驗性階段,雖然也能用於生產,但需要自己清楚他的使用範圍是否合適你。

引用開發者的話:This plugin is considered to be experimental yet fairly stable and potential suitable for production use as long as the user is aware of its limitations.

意思是:這個插件被認爲是實驗性的,但相當穩定,只要用戶意識到它的侷限性,它就有潛力適合生產使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章