0

我是 uber Cadence 的新手,正在尝试编写一个 cron 计划任务。Cadence 提供了一个 cronSchedule 注释(在线查找示例),它采用一个 cron 表达式字符串,用于在特定时间触发的方法。但是,我希望根据我们在 yml 文件中设置的内容来加载这个 cron 表达式。有什么办法吗?我目前只找到了这种@cronSchedule 注释方式来做到这一点。我还发现有一个 WorkflowOption 可以设置 cronSchedule。但是,不知道如何使用它来触发该方法。以下是当前代码。

public interface CronTask {


    @WorkflowMethod(
            workflowId = CRON_WORKFLOW_ID,
            taskList = TASK_LIST,
            executionStartToCloseTimeoutSeconds = 30,
            workflowIdReusePolicy = WorkflowIdReusePolicy.TerminateIfRunning
    )
    @CronSchedule("*/1 * * * *") 
    void kickOff(String name);
}

如果没有办法做到这一点。有谁知道我们是否可以简单地@CronSchedule用 spring 替换这个注释@Scheduled?注释WorkflowMethod是否仍能按预期工作?

4

1 回答 1

0

Temporal中,您可以通过 WorkflowOptions 来完成:

    WorkflowOptions workflowOptions =
        WorkflowOptions.newBuilder()
            .setWorkflowId(WORKFLOW_ID)
            .setTaskQueue(TASK_QUEUE)
            .setCronSchedule("* * * * *")
            .setWorkflowExecutionTimeout(Duration.ofMinutes(3))
            .setWorkflowRunTimeout(Duration.ofMinutes(1))
            .build();

    // Create the workflow client stub. It is used to start our workflow execution.
    GreetingWorkflow workflow = client.newWorkflowStub(GreetingWorkflow.class, workflowOptions);

我相信 Cadence 也有类似的能力。

于 2022-01-04T17:56:36.850 回答