夜间屏蔽代码示例:
/**
* 屏蔽类型
*/
@Getter
@ToString
@AllArgsConstructor
public enum ShieldType implements PowerfulEnum {
/**
* 模板设置为夜间不屏蔽
*/
NIGHT_NO_SHIELD(10, "夜间不屏蔽"),
/**
* 模板设置为夜间屏蔽 -- 凌晨接受到的消息会过滤掉
*/
NIGHT_SHIELD(20, "夜间屏蔽"),
/**
* 模板设置为夜间屏蔽(次日早上9点发送) -- 凌晨接受到的消息会次日发送
*/
NIGHT_SHIELD_BUT_NEXT_DAY_SEND(30, "夜间屏蔽(次日早上9点发送)");
private final Integer code;
private final String description;
}
/**
* 处理 夜间屏蔽(次日早上9点发送的任务)
*/
@XxlJob("nightShieldLazyJob")
public void execute() {
log.info("NightShieldLazyPendingHandler#execute!");
SupportThreadPoolConfig.getPendingSingleThreadPool().execute(() -> {
while (redisUtils.lLen(NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY) > 0) {
String taskInfo = redisUtils.lPop(NIGHT_SHIELD_BUT_NEXT_DAY_SEND_KEY);
if (CharSequenceUtil.isNotBlank(taskInfo)) {
try {
kafkaTemplate.send(topicName, JSON.toJSONString(Arrays.asList(JSON.parseObject(taskInfo, TaskInfo.class))
, new SerializerFeature[]{SerializerFeature.WriteClassName}));
} catch (Exception e) {
log.error("nightShieldLazyJob send kafka fail! e:{},params:{}", Throwables.getStackTraceAsString(e), taskInfo);
}
}
}
});
}
把晚上的接收到的消息扔进Redis list,然后启个定时任务(每天早上9点)轮询该list是否有数据,如果有再重新做处理就完事了。