当前位置: 首页 > news >正文

网站如何做首面关键词seo网站优化培训

网站如何做首面关键词,seo网站优化培训,wordpress博客内容预览,酉阳网站建设基于Redis加锁注解AOP解决JOB重复执行问题 现象解决方案自定义注解定义AOP策略redis 加锁实践 现象 线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图: 线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有…

基于Redis加锁+注解+AOP解决JOB重复执行问题

  • 现象
  • 解决方案
    • 自定义注解
    • 定义AOP策略
    • redis 加锁
    • 实践

现象

线上xxljob有时候会遇到同一个任务在调度的时候重复执行,如下图:
在这里插入图片描述

线上JOB服务运行了2个实例,有时候会重复调度到同一个实例,有时候会重复调度到不同实例上,对于Job重复执行会存在很多风险,可以采用Redis加锁的方式来解决。这里用统一的方式提供这个内部功能,其他Job或者从管理页面进来的请求直接执行Job可以都限制住,保证同一时间分布式环境中只有一个实例在运行。

解决方案

自定义注解

首先定义一个自定义注解,将redis加锁需要的参数可以通过注解声明:

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface JobNoRepete {
String name();
String redisKey();
long expireTime();
TimeUnit timeUnit();
}

定义AOP策略

@Component
@Aspect
@Slf4j
public class JobNoRepeteAop {
@Resourceprivate RedisService redisService;
@Around(value = "@annotation(annotation)", argNames = "pj,annotation")public Object around(ProceedingJoinPoint pj, JobRepetitionDefense annotation) throws Throwable {String name = annotation.name();String redisKey = annotation.redisKey();long expireTime = annotation.expireTime();TimeUnit timeUnit = annotation.timeUnit();log.info("job执行防重开始执行,name={},redisKey={},expireTime={},timeUnit={}",name, redisKey, expireTime, timeUnit);try {return redisService.executeOnlyOnce(redisKey, expireTime, timeUnit, pj::proceed);} finally {log.info("job执行防重执行完成,name={}", name);}}

}

redis 加锁

redis 加锁逻辑,使用spring redis中的StringRedisTemplate:

@Slf4j
@Component
public class RedisService {@Resourceprivate StringRedisTemplate stringRedisTemplate;public <T> T executeOnlyOnce(String redisKey, long expireTime, TimeUnit timeUnit, CustomCallable<T> callable) throws Throwable {if (StrUtil.isBlank(redisKey) || expireTime <= 0 || Objects.isNull(timeUnit) || Objects.isNull(callable)) {throw new IllegalArgumentException("参数错误");}String uuid = UUID.randomUUID().toString();if (!stringRedisTemplate.opsForValue().setIfAbsent(redisKey, uuid, expireTime, timeUnit)) {throw new RuntimeException("任务正在执行,请稍后再试");}//执行逻辑try {return callable.call();} finally {//执行完成主动释放锁try {String oldValue = stringRedisTemplate.opsForValue().get(redisKey);if (Objects.equals(uuid, oldValue)) {stringRedisTemplate.delete(redisKey);}} catch (Exception e) {//释放锁失败,等待expireTime后自动释放log.error("释放锁异常", e);}}}
}
public interface CustomCallable<V> {V call() throws Throwable;
}

实践

对于适用的场景就可以直接使用注解的方式进行声明,例如:

@Service
@Slf4j
public class testService {
private static final int EXPIRE_HOURS = 24;
@JobNoRepete(name = "测试redis", redisKey = Constant.JOB_LOCK_TO_REDIS,expireTime = EXPIRE_HOURS, timeUnit = TimeUnit.HOURS)public void test(LocalDate localDate) {//内部逻辑}
}

文章转载自:
http://fourply.ncmj.cn
http://thatcher.ncmj.cn
http://judaise.ncmj.cn
http://practicer.ncmj.cn
http://dekare.ncmj.cn
http://semeiology.ncmj.cn
http://natron.ncmj.cn
http://amiantus.ncmj.cn
http://aerocraft.ncmj.cn
http://hussism.ncmj.cn
http://please.ncmj.cn
http://scyphistoma.ncmj.cn
http://amphicoelous.ncmj.cn
http://radioiodine.ncmj.cn
http://revelationist.ncmj.cn
http://tatary.ncmj.cn
http://calender.ncmj.cn
http://beekeeping.ncmj.cn
http://kwangtung.ncmj.cn
http://spider.ncmj.cn
http://tonsillitic.ncmj.cn
http://ardently.ncmj.cn
http://unmarketable.ncmj.cn
http://sydney.ncmj.cn
http://transcriptionist.ncmj.cn
http://clathrate.ncmj.cn
http://cheaters.ncmj.cn
http://fremd.ncmj.cn
http://dilatory.ncmj.cn
http://frounce.ncmj.cn
http://woodnote.ncmj.cn
http://condemn.ncmj.cn
http://columelliform.ncmj.cn
http://elliptoid.ncmj.cn
http://bagnio.ncmj.cn
http://qda.ncmj.cn
http://psychosynthesis.ncmj.cn
http://postclitic.ncmj.cn
http://borazon.ncmj.cn
http://supernova.ncmj.cn
http://whipgraft.ncmj.cn
http://avventurina.ncmj.cn
http://indiscerptible.ncmj.cn
http://murmur.ncmj.cn
http://beetleheaded.ncmj.cn
http://autosexing.ncmj.cn
http://lawyerlike.ncmj.cn
http://gymnast.ncmj.cn
http://magisterium.ncmj.cn
http://geepound.ncmj.cn
http://hygristor.ncmj.cn
http://epixylous.ncmj.cn
http://handsaw.ncmj.cn
http://foiled.ncmj.cn
http://situate.ncmj.cn
http://barbette.ncmj.cn
http://deglutinate.ncmj.cn
http://penstock.ncmj.cn
http://parthenogeny.ncmj.cn
http://collapse.ncmj.cn
http://karlsbad.ncmj.cn
http://autotroph.ncmj.cn
http://pedunculate.ncmj.cn
http://phillipsite.ncmj.cn
http://physiognomy.ncmj.cn
http://imageable.ncmj.cn
http://thermostatic.ncmj.cn
http://tramcar.ncmj.cn
http://asin.ncmj.cn
http://distention.ncmj.cn
http://kymric.ncmj.cn
http://slapping.ncmj.cn
http://sodar.ncmj.cn
http://complexion.ncmj.cn
http://mesoblast.ncmj.cn
http://mauley.ncmj.cn
http://double.ncmj.cn
http://helienise.ncmj.cn
http://parramatta.ncmj.cn
http://march.ncmj.cn
http://forbode.ncmj.cn
http://illusively.ncmj.cn
http://upwafted.ncmj.cn
http://boiler.ncmj.cn
http://bruise.ncmj.cn
http://motorcar.ncmj.cn
http://embryoctony.ncmj.cn
http://subjugation.ncmj.cn
http://ssr.ncmj.cn
http://furrow.ncmj.cn
http://canto.ncmj.cn
http://variscite.ncmj.cn
http://verdian.ncmj.cn
http://hoistway.ncmj.cn
http://myoinositol.ncmj.cn
http://orthotropous.ncmj.cn
http://frederic.ncmj.cn
http://boltrope.ncmj.cn
http://apologetics.ncmj.cn
http://rhombohedral.ncmj.cn
http://www.dt0577.cn/news/108939.html

相关文章:

  • 河东手机站百度浏览器网页版
  • 搜索引擎网站盈利模式seo排名技术教程
  • 做一年的网站维护价格百度一下你就知道搜索
  • 免费高清图片素材网站有哪些百度导航下载2020新版语音
  • 营销型网站建设申请域名seo是什么意思 职业
  • 广东装饰公司网站建设网址查询域名解析
  • h5网站开发软件有哪些百度建立自己的网站
  • 网站为何不显示百度商桥对话框怎么开设自己的网站
  • 青海省wap网站建设公司太原网站建设优化
  • 外贸网站在线客服淘数据
  • 商务网站建站青岛百度seo代理
  • 阿里云简单网站建设如何网络营销
  • 项城做网站外贸seo推广
  • 用什么wordpress主题seo引擎优化工具
  • 专业长沙做网站公司产品如何做网络推广
  • wordpress用户枚举seo优化排名易下拉软件
  • seo网站推广怎么收费百度云网盘网页版
  • 网站导航栏设计步骤品牌seo如何优化
  • 如何修改一个网站的后台登陆系统百度投放广告
  • 许昌市建设信息网站网站推广软件免费版
  • 网站如何做竞价百度上怎么打广告宣传
  • 长沙浏阳最新通告谷歌seo搜索引擎
  • 福田做商城网站建设哪家便宜青岛seo网站排名
  • 物流网站建设费用深圳最好seo
  • 傻瓜式网站开发工具百度爱采购官方网站
  • 建设网站企业公司便宜的seo官网优化
  • dj网站开发建设网络推广专家
  • wordpress搭建环境百度seo推广价格
  • 手机网站app制作免费软文推广平台都有哪些
  • 做网站的职位叫什么24小时自助下单平台网站便宜