任务调度功能实现

一.引入依赖

因为springboot中包含了spring Task框架,所以spring boot项目不需要引入依赖

二.在启动类上添加@EnableScheduling注解

三.在方法上加入@Scheduled(cron = "*/1 * * * * ?")实现的任务调度

复制代码
@Service
@Slf4j
public class TaskServiceImpl implements TaskService {
    @Autowired
    private RedisService redisService;
    @Autowired
    ComfyuiApi comfyuiApi;
    @Override
    public void addQueueTask() {
        ComfyuiTask queueTask = redisService.getQueueTask();
        if (queueTask == null) {
            return;
        }
        try {
            Response<HashMap> response = comfyuiApi.addQueueTask(queueTask.getComfyuiRequestDto()).execute();
            if(response.isSuccessful()){
                log.info("任务添加成功:{}", response.body());
                Object o = response.body().get("prompt_id");
                queueTask.setPromptId(o.toString());
            }else{
                log.error("任务添加失败:{}", response.errorBody());
            }
        } catch (IOException e) {
            e.printStackTrace();
            log.error("任务添加失败:{}", e.getMessage());
        }
    }
    @Scheduled(cron = "*/1 * * * * ?")
    public void task(){
        addQueueTask();
    }
}

四.处理多集群问题-----分布式锁

因为多个处理器中同时队comfyui发送请求,就炸了,因为comfyui只能一次处理一个文生图请求

1.配置Redission

<1>配置Reddisonclient

<2>配置StringReidsTemplate连接工厂

复制代码
@Configuration
public class RedissonConfig {
    //配置redissonclient
    @Bean
    public RedissonClient redissonConfig(RedisProperties redisProperties){
        Config config = new Config();
        config.useSingleServer().setAddress(String.format("redis://%s:%s",redisProperties.getHost(),redisProperties.getPort()));
        return Redisson.create(config);
    }
    //配置stringRedisTemplate
    @Bean
    public StringRedisTemplate stringRedisTemplate(RedisProperties redisProperties){
        LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisProperties.getHost(),redisProperties.getPort());
        lettuceConnectionFactory.start();
        return new StringRedisTemplate(lettuceConnectionFactory);
    }
}

2.上锁

复制代码
@Scheduled(cron = "*/1 * * * * ?")
    public void task(){
        RLock lock = redissonClient.getLock(Lock_KEY);
        if(lock.tryLock()){
            try {
                log.info("添加锁成功");
                addQueueTask();
            } finally {
                lock.unlock();
            }
        }
    }
相关推荐
plainGeekDev10 分钟前
synchronized → Coroutines
android·java·kotlin
Lyra_Infra14 分钟前
故障排查报告:Spring boot连接 Nacos 异常及启动失败
java·spring boot
liguojun202523 分钟前
智慧文体旅系统选哪家?豆米跳跳十年技术沉淀支持源码交付
java·大数据·人工智能·物联网·1024程序员节
hold?fish:palm32 分钟前
7 接雨水
开发语言·c++·leetcode
学习使得吾快乐1 小时前
时序数据库 TDengine 在设备监测中的实际落地:从传感器上报到实时看板
java·时序数据库·tdenginne
geats人山人海1 小时前
c# 第九章 record
开发语言·c#
早期的虫儿有鸟吃1 小时前
vue2--Vuex 模块化
开发语言·前端·javascript
程序员清风1 小时前
推荐几个我常听的AI播客!
java·后端·面试
唐青枫2 小时前
Java Gradle 实战指南:从 Wrapper、Kotlin DSL 到 Spring Boot 多模块构建
java·kotlin·gradle
浪客川2 小时前
Android的SystemUI的启动流程简析
android·开发语言