每條記錄都存有時間戳,經過sql篩選出符合時間條件的記錄。redis
步驟:sql
1.產生消息
用時間戳做爲score,使用zadd key score1 value1 命令生產消息數據庫
2.讀取消息
使用zrangebysocre key min max withscores limit 0 1消費消息最先的一條消息。ide
3.消費消息並刪除隊列
redis 客戶端命令it
- ZADD key score1 member1 [score2 member2]
- ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT]
- ZREM key member [member ...]
消息在如下狀況下會變成死信息,會被DXL(Dead-Letter-Exchane)死信交換機投遞到死信隊列:class
1.消息被拒絕。
2.消息未被及時消費或者消費了不ack,直接過時。
3.隊列達到最大長度。im
死信隊列的實現:時間戳
消息(設置ttl)--->交換機-->隊列(消息過時)-->死信交換機-->死信隊列-->消費ember