訊息佇列
所謂的"訊息佇列"就是:在訊息的傳輸程序中保存訊息的容器,上次有朋友面試,面試官就問,redis可以用作訊息佇列嗎?當時一懵,每當想到訊息佇列:我們都會想到RabbitMQ,ActiveMQ,RocketMQ,等等一些專業的訊息中間件,但是如果我們做的事情比較簡單業務邏輯不是很復雜,只需要有一個訊息佇列,使用專業的訊息中間件是非常麻煩的,因此我們可以使用Redis做訊息佇列,
如果對訊息的可靠性沒有較高的要求的話,那么就可以使用Redis去實作,
Redis做訊息佇列,可以使用List這個資料型別,List里面有兩個命令,lpush/rpush操作來實作入隊,然后使用lpop/rpop實作出列,
在客戶端中,我們會維護一個死回圈來不停的從佇列中pop讀取資料,如果佇列中有訊息,則直接讀取,如果沒有,就會陷入死回圈,直到下一次有訊息進入,這種死回圈會造成大量的資源浪費,這個時候我們可以使用,blpop/brpop去處理,相當于lpop的阻塞,當沒有訊息到來的時候就會休眠,直到訊息來臨,才喚醒,pop去讀取資料,在java中可以使用while回圈去實作,
延遲訊息佇列
延遲訊息佇列,可以用zset實作,里面有score分數浮動數值,資料 可以根據core排序,zset可用于高效的檢索,我們可以將時間作為score,將value存到redis中,然后通過輪詢的方式去讀取訊息出來,在當前時間的基礎上在加5s,就可以實作延遲訊息佇列,
首先,如果訊息是字串,直接發送就可以,如果是物件,則需要序列化,實作序列化介面或者使用JSON進行序列化和反序列化,
步驟一:構造一個訊息物件,
步驟二:封裝訊息佇列,包括訊息入隊,和訊息出列
步驟三:測驗,構造訊息佇列,構造一個訊息生產者,構造一個訊息消費者,
本文轉載學習來自:https://www.cnblogs.com/javazl/p/12729462.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/154799.html
標籤:Java
