最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分布式利器redis及redisson的延遲隊列實踐

 更新時間:2022年03月01日 13:02:18   作者:kl  
這篇文章為大家主要介紹了分布式利器redis及redisson的延遲隊列實踐,搜遍全網(wǎng)好像還沒有使用redisson的延遲隊列的,redisson作為一個分布式利器,這么好用的工具沒人用有點可惜

前言碎語

首先說明下需求,一個用戶中心產(chǎn)品,用戶在試用產(chǎn)品有三天的期限,三天到期后準時準點通知用戶,試用產(chǎn)品到期了。這個需求如果不是準時通知,而是每天定點通知就簡單了。如果需要準時通知就只能上延遲隊列了。使用場景除了如上,典型的業(yè)務場景還有電商中的延時未支付訂單失效等等。

延遲隊列多種實現(xiàn)方式

  • 1.如基于RabbitMQ的隊列ttl+死信路由策略:通過設置一個隊列的超時未消費時間,配合死信路由策略,到達時間未消費后,回會將此消息路由到指定隊列
  • 2.基于RabbitMQ延遲隊列插件(rabbitmq-delayed-message-exchange):發(fā)送消息時通過在請求頭添加延時參數(shù)(headers.put("x-delay", 5000))即可達到延遲隊列的效果
  • 3.使用redis的zset有序性,輪詢zset中的每個元素,到點后將內(nèi)容遷移至待消費的隊列,(redisson已有實現(xiàn))
  • 4.使用redis的key的過期通知策略,設置一個key的過期時間為延遲時間,過期后通知客戶端

redisson中的延遲隊列實現(xiàn)

怎么封裝便于業(yè)務使用。

1.首先定義一個延遲job,里面包含一個map參數(shù),和隊列執(zhí)行器的具體實現(xiàn)class,觸發(fā)任務執(zhí)行時,map參數(shù)會被傳遞到具體的業(yè)務執(zhí)行器實現(xiàn)內(nèi)

/**
 * Created by kl on 2018/7/20.
 * Content :延時job
 */
public class DelayJob {
    private Map jobParams;//job執(zhí)行參數(shù)
    private Class aClass;//具體執(zhí)行實例實現(xiàn)
}

2.定義一個延遲job執(zhí)行器接口,業(yè)務需要實現(xiàn)這個接口,然后在execute方法內(nèi)寫自己的業(yè)務邏輯

/**
 * Created by kl on 2018/7/20.
 * Content :延時job執(zhí)行器接口
 */
public interface ExecuteJob {
     void execute(DelayJob job);
}

3.消費已經(jīng)到點的延時job服務,通過job參數(shù)調(diào)用業(yè)務執(zhí)行器實現(xiàn)

@Component
public class JobTimer {
    static final String jobsTag = "customer_jobtimer_jobs";
    @Autowired
    private RedissonClient client;
    @Autowired
    private ApplicationContext context;
    ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 2);
    @PostConstruct
    public void startJobTimer() {
        RBlockingQueueblockingQueue = client.getBlockingQueue(jobsTag);
        new Thread() {
            @Override
            public void run() {
                while (true) {
                    try {
                        DelayJob job = blockingQueue.take();
                        executorService.execute(new ExecutorTask(context, job));
                    } catch (Exception e) {
                        e.printStackTrace();
                        try {
                            TimeUnit.SECONDS.sleep(60);
                        } catch (Exception ex) {
                        }
                    }
                }
            }
        }.start();
    }
    class ExecutorTask implements Runnable {
        private ApplicationContext context;
        private DelayJob delayJob;
        public ExecutorTask(ApplicationContext context, DelayJob delayJob) {
            this.context = context;
            this.delayJob = delayJob;
        }
        @Override
        public void run() {
            ExecuteJob service = (ExecuteJob) context.getBean(delayJob.getaClass());
            service.execute(delayJob);
        }
    }
}

4.封裝延時job服務

/**
 * Created by kl on 2018/7/20.
 * Content :延時job服務
 */
@Component
public class DelayJobService {
    @Autowired
    private RedissonClient client;
    public void submitJob(DelayJob job, Long delay, TimeUnit timeUnit){
        RBlockingQueueblockingQueue = client.getBlockingQueue(JobTimer.jobsTag);
        RDelayedQueue delayedQueue = client.getDelayedQueue(blockingQueue);
        delayedQueue.offer(job,delay,timeUnit);
    }
}

文末結(jié)語

redisson作為一個分布式利器,這么好用的工具沒人用有點可惜,還有一個原因是有個想法,想將延遲隊列這個功能封裝成一個spring boot的start依賴,然后開源出來,造福四方,希望大家以后多多支持腳本之家!

相關文章

  • 詳解SSH框架和Redis的整合

    詳解SSH框架和Redis的整合

    本篇文章主要介紹了SSH框架和Redis的整合,詳細的介紹了Struts+Spring+Hibernate和Redis整合,有興趣的可以了解一下。
    2017-03-03
  • Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)

    Redis三種集群搭建配置(主從集群、哨兵集群、分片集群)

    本文主要介紹了Redis三種集群搭建配置,包括主從集群、哨兵集群、分片集群,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • K8s部署Redis主從集群教程

    K8s部署Redis主從集群教程

    本文介紹了在Kubernetes環(huán)境下搭建Redis集群的詳細步驟,包括環(huán)境準備、安裝NFS、創(chuàng)建PV卷、搭建Redis集群、集群初始化、主從切換測試以及開放外網(wǎng)端口等內(nèi)容
    2025-01-01
  • Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)"(實例詳解)

    Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)"(實例詳解)

    布隆過濾器(Bloom Filter)本質(zhì)是一個基于哈希函數(shù)的概率型數(shù)據(jù)結(jié)構,核心作用是快速判斷一個元素是否存在于集合中,今天給大家介紹Redis實現(xiàn)布隆過濾器緩存去重的"智能門衛(wèi)",感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • Redis+Caffeine兩級緩存的實現(xiàn)

    Redis+Caffeine兩級緩存的實現(xiàn)

    本文主要介紹了Redis+Caffeine兩級緩存的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Redisson分布式限流的實現(xiàn)原理分析

    Redisson分布式限流的實現(xiàn)原理分析

    這篇文章主要介紹了Redisson分布式限流的實現(xiàn)原理分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 一篇文章帶你弄清楚Redis的精髓

    一篇文章帶你弄清楚Redis的精髓

    Redis是一個開源的、支持網(wǎng)絡、基于內(nèi)存的鍵值對存儲系統(tǒng),它可以用作數(shù)據(jù)庫、緩存和消息中間件。它支持多種數(shù)據(jù)類型,包括字符串、散列、列表、集合、位圖等,擁有極快的讀寫速度,并且支持豐富的特性,如事務、持久化、復制、腳本、發(fā)布/訂閱等。
    2023-02-02
  • Redis cluster集群模式的原理解析

    Redis cluster集群模式的原理解析

    這篇文章主要介紹了Redis cluster集群模式的原理解析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Redis和MySQL保證雙寫一致性的問題解析

    Redis和MySQL保證雙寫一致性的問題解析

    Redis和MySQL的雙寫一致性指的是在同時使用緩存和數(shù)據(jù)庫存儲數(shù)據(jù)的時候,保證Redis和MySQL中數(shù)據(jù)的一致性,那么如何才能保證他們的一致性呢,下面小編就來為大家詳細講講
    2023-11-11
  • Redis Cluster集群收縮主從節(jié)點詳細教程

    Redis Cluster集群收縮主從節(jié)點詳細教程

    集群收縮的源端就是要下線的主節(jié)點,目標端就是在線的主節(jié)點,這篇文章主要介紹了Redis Cluster集群收縮主從節(jié)點詳細教程,需要的朋友可以參考下
    2021-11-11

最新評論

康平县| 郁南县| 湖北省| 西充县| 胶南市| 霍林郭勒市| 漾濞| 南汇区| 莆田市| 张家港市| 霸州市| 景宁| 蒙阴县| 平阴县| 桑日县| 永吉县| 肃南| 方山县| 内江市| 纳雍县| 青阳县| 彩票| 万宁市| 大余县| 吉木萨尔县| 秦皇岛市| 大渡口区| 乐昌市| 通许县| 新营市| 梅州市| 任丘市| 岳阳县| 土默特左旗| 营山县| 黔东| 宁晋县| 会昌县| 延寿县| 方正县| 左权县|