我有一个简单的工作,由两个任务组成,每个任务都发出HTTP请求以获得一些状态结果。
@Bean
public Job receiveStatusesJob(
@Qualifier(RECEIVE_STATUSES_PARTITIONER_BEAN) Partitioner partitioner,
SecondStatusReceivingTasklet secondStatusReceivingTasklet) {
var messagingTemplate = new MessagingTemplate();
messagingTemplate.setDefaultChannel(receiveStatusesPartitionRequestChannel());
return jobBuilderFactory.get(RECEIVE_STATUSES_JOB)
.start(managerStepBuilderFactory.get(RECEIVE_STATUS_MANAGER_STEP)
.partitioner(RECEIVE_STATUS_WORKER_STEP, partitioner)
.gridSize(100)
.messagingTemplate(messagingTemplate)
.allowStartIfComplete(true)
.build())
.next(stepBuilderFactory.get(SECOND_RECEIVE_STATUS_STEP)
.tasklet(secondStatusReceivingTasklet)
.allowStartIfComplete(true)
.build())
.incrementer(new RunIdIncrementer())
.build();
}
第一个微线程看起来像
@Slf4j
@Component
@StepScope
public class StatusReceivingTasklet extends Tasklet {
//constructors and services
@Override
public RepeatStatus execute(StepContribution stepContribution, ChunkContext chunkContext) {
Object urlsToCheck = stepContribution.getStepExecution().getExecutionContext().get(URLS_TO_CHECK_PARAM);
if (urlsToCheck instanceof List) {
return receiveProviderPaymentCbsStatuses((List<String>) urlsToCheck );
}
}
private RepeatStatus receiveStatuses(List<String> urlsToCheck ) {
var repeatStatus = RepeatStatus.FINISHED;
for (String url: urlsToCheck ) {
repeatStatus = sendStatusRequestAndHandleResponse(repeatStatus, url);
}
return repeatStatus;
}
private RepeatStatus sendStatusRequestAndHandleResponse(RepeatStatus repeatStatus,
String urlToCheck) {
StatusResponse statusResponse =
sendingService.checkStatus(urlToCheck);
log.debug("Received CBS response: {}", cbsStatusResponse);
if (statusResponse.getHttpStatus().equals(200)) {
//business logis work
} else if (!statusResponse.getHttpStatus.equals(200) && !status.getHttpStatus.equals(500)) {
repeatStatus = RepeatStatus.CONTINUABLE;
} else {
// business logic
}
return repeatStatus;
}
}
因此,如果我的响应状态与200不同,而500Task处于状态,控制,如果我有200个任务状态,或者与500个任务状态不同,则为 different 。当我有tas状态可持续时,如何正确地定期(每5-10分钟)继续接收状态,而任务不在状态完成?
发布于 2022-05-04 09:12:07
我不确定我是否完全理解您的用例,但我不会将调度逻辑(每5-10分钟)与任务的业务逻辑混合在一起。您可以定义一个执行单个调用的任务,然后将其调度为每5-10分钟运行一次您最喜欢的调度库(例如,一个带有@预定注释的方法)。
https://stackoverflow.com/questions/72097902
复制相似问题