任务调度功能实现

一.引入依赖

因为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();
            }
        }
    }
相关推荐
t***5447 小时前
Clang 编译器在 Orwell Dev-C++ 中的局限性
开发语言·c++
OtIo TALL8 小时前
redis7 for windows的安装教程
java
2601_949817728 小时前
Spring Boot3.3.X整合Mybatis-Plus
spring boot·后端·mybatis
oy_mail8 小时前
QoS质量配置
开发语言·智能路由器·php
oyzz1208 小时前
PHP操作redis
开发语言·redis·php
uNke DEPH8 小时前
Spring Boot的项目结构
java·spring boot·后端
nashane8 小时前
HarmonyOS 6学习:网络能力变化监听与智能提示——告别流量偷跑,打造贴心网络感知应用
开发语言·php·harmony app
xixingzhe28 小时前
idea启动vue项目
java·vue.js·intellij-idea
zhenxin01228 小时前
Spring Boot 3.x 系列【3】Spring Initializr快速创建Spring Boot项目
spring boot·后端·spring
wzl202612139 小时前
企业微信定时群发技术实现与实操指南(原生接口+工具落地)
java·运维·前端·企业微信