用redis stream作隊列的一些心得


最近做了些基於redis stream做消息隊列的工作,有人會問,為什么要用redis,而不是專用消息隊列中間件來做呢?

好吧,一個是資源不足問題,另一個也是不想增加依賴項,最終導致了不用ons、rocketmq、rabbitmq來做。

曾經的概念里,用redis做消息隊列都是不正統的,很脆弱的選擇,一般是看不上的,直到最近的redis5 stream特性出來后,就另眼相看了。

stream特性是模仿kafka設計的,有消費組、有ACK機制、能查看已下發但未收到ACK消息列表,確實強大了一個檔次。

這個消費組,需要說下,有了消費組,就代表可以做1對N的事件處理、也可以做1對1的消息處理

消費組中還有consumer,如果某個消費組消息處理不過來,就可以通過增加多個consumer來加快消費速率

發消息、很容易,沒啥說的

由於是框架層面的中間件產,因此consumer收到消息還需要自動觸發業務開發人員編寫的業務處理消息方法,也是個靈活的地方,但是屬於spring bean invoke方面的了,這里略過,總體來說也沒多少技術含量

另外比較重要的地方是監控以及消息轉移部分,比如上線后過段時間后consumer的變動、或者進程、或者docker宕機導致出現了未ack的消息,此時怎樣處理?怎樣監控有這樣的消息存在了?

假設內存不多時,消息隊列消息太多導致占用內存過大,想釋放一部分內存又需要怎樣操作?

這些問題直接用x系列命令操作的話還挺麻煩,最好是寫個程序定時監控上報,然后通過webapi方式來轉移消息等就會好很多。

還好,上面說的這些基礎層面的api redission都提供了,只是要成為半成品的框架,考慮易用性,則還需要自己開發。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM