<dependency>
<groupId>io.temporal</groupId>
<artifactId>temporal-sdk</artifactId>
<version>1.29.0</version>
</dependency>
<dependency>
<groupId>io.temporal</groupId>
<artifactId>temporal-spring-boot-starter</artifactId>
<version>1.29.0</version>
</dependency>
不要正确的逻辑代码中调用log.error(“xxxx”),这会触发temporal的异常,导致程序直接中止,报temporal的死锁错误,如:
@Override
public void importBatch(KnowledgeImportRequest request,int knowledgeVersion) {
this.totalCount = request.getSources().size();
this.status = ProgressStatus.RUNNING.getName();
//获取所有的新闻内容
for(int i=0;i<request.getSources().size();i++){
Workflow.sleep(Duration.ofMillis(100));
// 只在暂停时才等待,正常情况立即继续
if (paused && !cancelled) {
log.info("Workflow paused, waiting for resume... Index: {}", i);
// 等待恢复或取消,最多30秒
boolean resumed = Workflow.await(Duration.ofSeconds(30),
() -> !paused || cancelled
);
if (cancelled) {
log.warn("Workflow cancelled during pause");
this.status = ProgressStatus.CANCELLED.getName();
return;
}
if (!resumed) {
// 超时自动恢复
paused = false;
log.warn("Pause timeout at index {}, auto-resuming", i);
} else {
log.info("Workflow resumed at index {}", i);
}
}
// 检查取消状态
if (cancelled) {
log.warn("Workflow cancelled at index {}", i);
this.status = ProgressStatus.CANCELLED.getName();
return;
}
currentNo = i;
KnowledgeSource source = request.getSources().get(i);
indexName = source.getEsIndex();
infoId = source.getInfoId();
try{
log.info("这是index{}",indexName);
}catch (Exception e){
log.error("资讯导入失败:index={};infoId={}", source.getEsIndex(),source.getInfoId(), e);
failedCount++;
}
}
if(failedCount>0){
status = ProgressStatus.FAILED.getName();
}else{
status = ProgressStatus.SUCCESS.getName();
}
}
注意:红字的部分绝对不要用log.error(“xxxx”)