定時發公告
使用者下單30分鐘後未付款自動關閉訂單
使用者下單後延時簡訊提醒
延時關閉空閒客戶端連線
使用redis提供的有序資料結構zset,把過期時間戳作為score。
public void produce(string topic, string msg, date date) 生產訊息:{},於{}消費", topic, msg, date);
long addsuccess = stringredistemplate.opsforset().add("topiclist", topic);
if (addsuccess != null && addsuccess > 0) ", topic);
string msg;
try catch (querytimeoutexception e) 監聽到訊息:{}", topic, msg);
if (msg != null) catch (exception e) ,topic:{}", msg, topic);
produce(topic, msg, new date(system.currenttimemillis() + 60000));
} while (true);
單元測試
@slf4j
@runwith(springrunner.class)
@springboottest
public class redisdelayqueuetest 】收到訊息:{}","topic0",msg);
return true;
}); redisdelayqueue.consumer("topic1", (msg)->】收到訊息:{}","topic1",msg);
return true;
redisdelayqueue.consumer("topic2", (msg) -> 】收到訊息:{}", "topic2", msg);
return true;
timeunit.minutes.sleep(10);
Redis 延時佇列
延時佇列可以通過 redis 的 zset 有序列表 來實現。我們將訊息序列化成乙個字串作為 zset 的 value,這個訊息的到期處理時間作為 score,然後用多個執行緒輪詢 zset 獲取到期的任務進行處理,多個執行緒是為了保障可用性,萬一掛了乙個執行緒還有其它執行緒可以繼續處理。因為有多個...
Redis 非同步訊息佇列與延時佇列
非同步訊息佇列 說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢...
Redis應用 非同步訊息佇列與延時佇列
說道訊息佇列,你肯定會想到kafka rabbitmq等訊息中介軟體,這些專業的訊息中介軟體提供了很多功能特性,當然他的部署使用維護都是比較麻煩的。如果你對訊息佇列沒那麼高要求,想要輕量級的,使用redis就沒錯啦。redis通過list資料結構來實現訊息佇列.主要使用到如下命令 廢話補不多說上 r...