All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.joekerouac.async.task.AsyncTaskService Maven / Gradle / Ivy

The newest version!
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE
 * file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file
 * to You under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 */
package com.github.joekerouac.async.task;

import java.time.LocalDateTime;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import com.github.joekerouac.async.task.model.CancelStatus;
import com.github.joekerouac.async.task.model.ExecStatus;
import com.github.joekerouac.async.task.model.TransStrategy;
import com.github.joekerouac.async.task.spi.AbstractAsyncTaskProcessor;

/**
 * @author JoeKerouac
 * @date 2022-10-14 14:37:00
 * @since 1.0.0
 */
public interface AsyncTaskService {

    /**
     * 默认最大重试次数
     */
    int MAX_RETRY = 6;

    /**
     * 启动服务
     */
    void start();

    /**
     * 停止服务
     */
    void stop();

    /**
     * 添加处理器
     *
     * @param processor
     *            处理器
     */
    void addProcessor(AbstractAsyncTaskProcessor processor);

    /**
     * 移除指定处理器
     *
     * @param processorName
     *            处理器名
     * @return 如果指定处理器存在,则将其移除,并且返回
     */
    > P removeProcessor(String processorName);

    /**
     * 获取指定处理器
     *
     * @param processorName
     *            处理器名
     * @return 指定的处理器,如果不存在则返回null
     */
    > P getProcessor(String processorName);

    /**
     * 添加任务,如果当前存在事务,应该加入事务,如果当前没有事务,则不使用事务
     *
     * @param requestId
     *            任务幂等ID,不同的任务相同的幂等ID将被认为是同一个任务,会被忽略
     * @param task
     *            任务task
     */
    default void addTask(@NotBlank @Size(max = 200) String requestId, @NotNull Object task) {
        addTask(requestId, task, MAX_RETRY, LocalDateTime.now(), task.getClass().getSimpleName(),
            TransStrategy.SUPPORTS);
    }

    /**
     * 添加任务,如果当前存在事务,应该加入事务,如果当前没有事务,则不使用事务
     *
     * @param requestId
     *            任务幂等ID,不同的任务相同的幂等ID将被认为是同一个任务,会被忽略
     * @param task
     *            任务task
     * @param maxRetry
     *            任务最大重试次数,-1表示无限重试,不包含第一次执行
     */
    default void addTask(@NotBlank @Size(max = 200) String requestId, @NotNull Object task, @Min(-1) int maxRetry) {
        addTask(requestId, task, maxRetry, LocalDateTime.now(), task.getClass().getSimpleName(),
            TransStrategy.SUPPORTS);
    }

    /**
     * 添加任务,如果当前存在事务,应该加入事务,如果当前没有事务,则不使用事务
     *
     * @param requestId
     *            任务幂等ID,不同的任务相同的幂等ID将被认为是同一个任务,会被忽略
     * @param task
     *            任务task
     * @param maxRetry
     *            任务最大重试次数,-1表示无限重试,不包含第一次执行
     * @param execTime
     *            任务执行时间
     */
    default void addTask(@NotBlank @Size(max = 200) String requestId, @NotNull Object task, @Min(-1) int maxRetry,
        @NotNull LocalDateTime execTime) {
        addTask(requestId, task, maxRetry, execTime, task.getClass().getSimpleName(), TransStrategy.SUPPORTS);
    }

    /**
     * 添加任务
     * 
     * @param requestId
     *            任务幂等ID,不同的任务相同的幂等ID将被认为是同一个任务,会被忽略
     * @param task
     *            任务task
     * @param maxRetry
     *            任务最大重试次数,-1表示无限重试,不包含第一次执行
     * @param execTime
     *            任务执行时间
     * @param taskProcessor
     *            任务执行器
     * @param transStrategy
     *            当前执行事务策略
     */
    void addTask(@NotBlank @Size(max = 200) String requestId, @NotNull Object task, @Min(-1) int maxRetry,
        @NotNull LocalDateTime execTime, @NotBlank @Size(max = 100) String taskProcessor, TransStrategy transStrategy);

    /**
     * 添加任务,任务添加成功后直接将状态修改为WAIT,等待唤醒
     *
     * @param requestId
     *            任务幂等ID,不同的任务相同的幂等ID将被认为是同一个任务,会被忽略
     * @param task
     *            任务task
     * @param maxRetry
     *            任务最大重试次数,-1表示无限重试,不包含第一次执行
     * @param execTime
     *            任务执行时间
     * @param taskProcessor
     *            任务执行器
     * @param transStrategy
     *            当前执行事务策略
     */
    void addTaskWithWait(@NotBlank @Size(max = 200) String requestId, @NotNull Object task, @Min(-1) int maxRetry,
        @NotNull LocalDateTime execTime, @NotBlank @Size(max = 100) String taskProcessor, TransStrategy transStrategy);

    /**
     * 唤醒任务,如果任务处于{@link ExecStatus#WAIT}状态,则任务被唤醒,切换到{@link ExecStatus#READY}状态,如果当前存在事务,应该加入事务,如果当前没有事务,则不使用事务
     * 
     * @param requestId
     *            任务requestId
     */
    default void notifyTask(String requestId) {
        notifyTask(requestId, TransStrategy.SUPPORTS);
    }

    /**
     * 唤醒任务,如果任务处于{@link ExecStatus#WAIT}状态,则任务被唤醒,切换到{@link ExecStatus#READY}状态,如果当前存在事务,应该加入事务,如果当前没有事务,则不使用事务
     *
     * @param requestId
     *            任务requestId
     * @param transStrategy
     *            事务策略
     */
    void notifyTask(String requestId, TransStrategy transStrategy);

    /**
     * 取消任务
     * 
     * @param requestId
     *            要取消的任务requestId
     * @return 取消结果
     */
    default CancelStatus cancelTask(String requestId) {
        return cancelTask(requestId, TransStrategy.SUPPORTS);
    }

    /**
     * 取消任务
     *
     * @param requestId
     *            要取消的任务requestId
     * @param transStrategy
     *            事务策略
     * @return 取消结果
     */
    CancelStatus cancelTask(String requestId, TransStrategy transStrategy);

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy