延時隊列Delay Queue的實現

方式一:數據庫實現

每條記錄都存有時間戳,經過sql篩選出符合時間條件的記錄。redis

方式二:redis的有序集合sort set

步驟: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 ...]

方式三:rabbitMQ的死信隊列

消息在如下狀況下會變成死信息,會被DXL(Dead-Letter-Exchane)死信交換機投遞到死信隊列:class

1.消息被拒絕。
2.消息未被及時消費或者消費了不ack,直接過時。
3.隊列達到最大長度。im

死信隊列的實現:時間戳

消息(設置ttl)--->交換機-->隊列(消息過時)-->死信交換機-->死信隊列-->消費ember

相關文章
相關標籤/搜索