Java中调用temporal的巨坑

            <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”)