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

com.github.yizzuide.milkomeda.ice.Ice Maven / Gradle / Ivy

/*
 * Copyright (c) 2021 yizzuide All rights Reserved.
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

package com.github.yizzuide.milkomeda.ice;

import com.github.yizzuide.milkomeda.hydrogen.uniform.UniformPage;
import com.github.yizzuide.milkomeda.hydrogen.uniform.UniformQueryPageData;
import com.github.yizzuide.milkomeda.ice.inspector.JobStatInfo;
import com.github.yizzuide.milkomeda.ice.inspector.JobWrapper;
import com.github.yizzuide.milkomeda.universe.lang.Tuple;
import org.jetbrains.annotations.NotNull;

import java.time.Duration;
import java.util.List;
import java.util.Map;

/**
 * Ice
 * 最外层接口
 *
 * @author yizzuide
 * @since 1.15.0
 * @version 3.14.1
 * 
* Create at 2019/11/16 15:11 */ public interface Ice { /** * 添加延迟任务(job的id会与topic合并) * @param job Job * @return true if add success */ @SuppressWarnings("rawtypes") boolean add(Job job); /** * 添加延迟任务 * @param job Job * @param mergeIdWithTopic 是否把Job的topic合并进id(一般是建议合并,因为延迟任务会有topic流转再入队的情况) * @param replaceWhenExists 当存在时替换 * @return true if add success * @since 3.0.9 */ @SuppressWarnings("rawtypes") boolean add(Job job, boolean mergeIdWithTopic, boolean replaceWhenExists); /** * 添加延迟任务(job的id会与topic合并) * @param id 任务id * @param topic 任务分组 * @param body 业务数据 * @param delay 延迟时间 * @param 业务数据类型 * @return true if add success * @since 3.0.0 */ boolean add(String id, String topic, T body, Duration delay); /** * 添加延迟任务(job的id会与topic合并) * @param id 任务id * @param topic 任务分组 * @param body 业务数据 * @param delay 延迟时间ms * @param 业务数据类型 * @return true if add success * @since 3.0.0 */ boolean add(String id, String topic, T body, long delay); /** * 构建延迟任务 * @param id 任务id * @param topic 任务分组 * @param body 业务数据 * @param delay 延迟时间 * @param 业务数据类型 * @return Job * @since 3.0.9 */ Job build(String id, String topic, T body, Duration delay); /** * 构建延迟任务 * @param id 任务id * @param topic 任务分组 * @param body 业务数据 * @param delay 延迟时间ms * @param 业务数据类型 * @return Job * @since 3.0.9 */ Job build(String id, String topic, T body, long delay); /** * Re-push job to job pool. * @param jobId job id * @param topic job topic * @return ture if push success * @since 3.14.0 */ boolean rePushJob(String jobId, String topic); /** * Get job inspect info list. * @param queryPageData page data for query * @return UniformPage inspection page data * @since 3.14.0 */ UniformPage getJobInspectPage(UniformQueryPageData queryPageData); /** * Get job inspect info with topic and job id. * @param topic job topic * @param jobId job id * @return job inspection info * @since 3.14.0 */ JobWrapper getJobInspectInfo(String topic, String jobId); /** * Get job info in job pool. * @param jobId job id * @param topic job topic * @return Job * @since 3.14.0 */ Job getJobDetail(String jobId, String topic); /** * Get cache keys. * @param jobId job id * @param topic job topic * @return key map * @since 3.14.0 */ Map getCacheKey(String jobId, String topic); /** * Get jobs stat info. * @return JobStatInfo * @since 3.14.0 */ JobStatInfo getStatInfo(); /** * Pull number of jobs. * @param topic job topic * @param count pull size * @param job list type * @return job list */ List> pull(String topic, Integer count); /** * 取出待处理任务 * @param topic 任务分组 * @param 业务数据 * @return Job */ Job pop(String topic); /** * 批量取出待处理任务 * @param topic 任务分组 * @param count 批量数 * @param 业务数据 * @return List */ List> pop(String topic, int count); /** * Finish job list, remove it from pool. * @param jobs job list * @param 业务数据 */ void finish(List> jobs); /** * Finish job list, remove it from pool. * @param jobIds job id list */ void finish(Object... jobIds); /** * Extract job id. * @param mixId merged topic with job id * @return pure job id * @since 3.14.0 */ @NotNull static String getId(String mixId) { if (!mixId.contains(IceProperties.MERGE_ID_SEPARATOR)) { return mixId; } return deconstruct(mixId).getT2(); } /** * Deconstructing topic and job id within mixId. * @param mixId merged topic with job id * @return tuple(topic, jobId) * @since 3.14.0 */ @NotNull static Tuple deconstruct(String mixId) { if (!mixId.contains(IceProperties.MERGE_ID_SEPARATOR)) { throw new IllegalArgumentException("Ice deconstruct job error with mixId: " + mixId); } String[] parts = mixId.split(IceProperties.MERGE_ID_SEPARATOR); return Tuple.build(parts[0], parts[1]); } /** * Mixins job id with topic. * @param jobId pure job id * @param topic job topic * @return merged topic with job id * @since 3.14.0 */ @NotNull static String mergeId(Object jobId, String topic) { if (jobId.toString().contains(IceProperties.MERGE_ID_SEPARATOR)) { return jobId.toString(); } return topic + IceProperties.MERGE_ID_SEPARATOR + jobId; } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy