上一篇文章解决了 多容器部署job服务不重复执行的问题,本篇进一步解决任务中的子计算任务在多容器部署时重复执行的问题。
业务key是”index_job_“+code+yyyyMMdd
分布式锁是”index_job_“+code
这2个key是不同的东西,这个是一个容易混淆的点,不要把业务的key当成锁的key,
redisson中分布式锁的key是 ”index_job_“+code+UUID+threadID
分布式锁的key相当一个门,
获得锁RLock rLock=redisBusiness.getRLock("",doorKey);//解决竞争分布式锁
拿到锁
Boolean flag= rLock.tryLock(10,6000, TimeUnit.MILLISECONDS);//拿到锁
返回true相当于你可以打开门,就可以操作业务的key了
返回false相当于在有2个机器并且同时走这段代码的时候第一个机器拿到钥匙开门了,第二个机器就拿不到钥匙了去开门了。
redis客户端使用RedissonClient
/**
* 分布式锁任务
*
* @param companyCode
* @param years
* @param voList
*/
private void computeValue(String companyCode,Integer years,List<IndexCustVO> voList){
log.info(