¶Ô±ÈÐÂÎļþ |
| | |
| | | package org.dromara.job.processors; |
| | | |
| | | import com.google.common.collect.Lists; |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Getter; |
| | | import lombok.NoArgsConstructor; |
| | | import org.dromara.common.json.utils.JsonUtils; |
| | | import org.springframework.stereotype.Component; |
| | | import tech.powerjob.worker.core.processor.ProcessResult; |
| | | import tech.powerjob.worker.core.processor.TaskContext; |
| | | import tech.powerjob.worker.core.processor.sdk.MapProcessor; |
| | | |
| | | import java.util.List; |
| | | import java.util.concurrent.ThreadLocalRandom; |
| | | |
| | | /** |
| | | * Mapå¤çå¨ ç¤ºä¾ |
| | | * |
| | | * @author tjq |
| | | * @since 2020/4/18 |
| | | */ |
| | | @Component |
| | | public class MapProcessorDemo implements MapProcessor { |
| | | |
| | | |
| | | /** |
| | | * æ¯ä¸æ¹åéä»»å¡å¤§å° |
| | | */ |
| | | private static final int BATCH_SIZE = 100; |
| | | /** |
| | | * åéçæ¹æ¬¡ |
| | | */ |
| | | private static final int BATCH_NUM = 5; |
| | | |
| | | @Override |
| | | public ProcessResult process(TaskContext context) throws Exception { |
| | | |
| | | log.info("============== MapProcessorDemo#process =============="); |
| | | log.info("isRootTask:{}", isRootTask()); |
| | | log.info("taskContext:{}", JsonUtils.toJsonString(context)); |
| | | |
| | | if (isRootTask()) { |
| | | log.info("==== MAP ===="); |
| | | List<SubTask> subTasks = Lists.newLinkedList(); |
| | | for (int j = 0; j < BATCH_NUM; j++) { |
| | | SubTask subTask = new SubTask(); |
| | | subTask.siteId = j; |
| | | subTask.itemIds = Lists.newLinkedList(); |
| | | subTasks.add(subTask); |
| | | for (int i = 0; i < BATCH_SIZE; i++) { |
| | | subTask.itemIds.add(i + j * 100); |
| | | } |
| | | } |
| | | map(subTasks, "MAP_TEST_TASK"); |
| | | return new ProcessResult(true, "map successfully"); |
| | | } else { |
| | | |
| | | log.info("==== PROCESS ===="); |
| | | SubTask subTask = (SubTask) context.getSubTask(); |
| | | for (Integer itemId : subTask.getItemIds()) { |
| | | if (Thread.interrupted()) { |
| | | // ä»»å¡è¢«ä¸æ |
| | | log.info("job has been stop! so stop to process subTask: {} => {}", subTask.getSiteId(), itemId); |
| | | break; |
| | | } |
| | | log.info("processing subTask: {} => {}", subTask.getSiteId(), itemId); |
| | | int max = Integer.MAX_VALUE >> 7; |
| | | for (int i = 0; ; i++) { |
| | | // 模æèæ¶æä½ |
| | | if (i > max) { |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | // æµè¯å¨ Map ä»»å¡ä¸è¿½å ä¸ä¸æ |
| | | context.getWorkflowContext().appendData2WfContext("Yasuo", "A sword's poor company for a long road."); |
| | | boolean b = ThreadLocalRandom.current().nextBoolean(); |
| | | if (context.getCurrentRetryTimes() >= 1) { |
| | | // éè¯çè¯ä¸å®ä¼æå |
| | | b = true; |
| | | } |
| | | return new ProcessResult(b, "RESULT:" + b); |
| | | } |
| | | } |
| | | |
| | | @Getter |
| | | @NoArgsConstructor |
| | | @AllArgsConstructor |
| | | public static class SubTask { |
| | | private Integer siteId; |
| | | private List<Integer> itemIds; |
| | | } |
| | | } |