我的开源:redis阻塞队列执行器

1. 开源项目地址

2. 为什么写这个

出于使用简洁代码以满足业务需求的目的,避免重复写业务无关的代码,我对redis阻塞队

列使用过程中的通用性代码进行了封装,并且增加了一些特性。

3. 使用者需要做的事情

实现RedisTemplate接口,向队列添加元素,添加元素处理者.

4. 特性

    redis本身的高性能、高可用; redis阻塞队列的阻塞和分发特性; 周期概念 从将所有待处理元素批量加入到阻塞队列,直到这些元素被处理完毕,称为一个周期; 可记录周期完毕状态; 可在周期完毕时进行回调; 记录处理失败的数量; 元素不会丢失 正在处理队列。消费者获取元素后,元素进入正在处理队列,完毕后从该队列删除。 检查机制。考虑的场景:消费者处理元素过程中,由于重启或宕机,导致元素未被处理。 元素存储在redis队列,对比服务端使用线程池,不必考虑队列长度、数据丢弃策略。 资源充分利用 服务器集群消费阻塞队列,对比单机使用线程池,资源利用更充分。 处理进度概要

5. 图示

6. 使用场景

    分片处理 ,集群处理一批数据 比 单实例 快很多; 依赖关系,周期A处理完毕,触发周期B开始,……; 普通的阻塞队列使用场景;

7. 代码实例

// 第一步  实现 RedisTemplate
public class RedisTemplateImpl implements RedisTemplate{
    // ...
}
// 第二步 向阻塞队列添加元素

// 与profile相关的环境标志
String env;
String blockKey = RedisBlockListUtils.getBlockListKey("自定义队列名称", env);

// 准备待处理元素
List<String> params;
// 作为新周期
RedisBlockListExecutor.add4NewPeriod(new RedisTemplateImpl(), blockKey, params);

// 不适用周期
// RedisBlockListExecutor.add(new RedisTemplateImpl(), blockKey, params, false/true);
经验分享 程序员 微信小程序 职场和发展