azure 停止活动功能以允许部署

xpcnnkqh  于 2023-10-22  发布在  其他
关注(0)|答案(1)|浏览(111)

我正在研究持久功能,我发现非常可怕的一件事是,似乎没有一种方法可以停止活动功能
如果这是真的,那么如何才能涵盖我们可能想要“从头开始”的部署情况,并且我们将更新代码
除非我误解了什么,否则在部署情况下,我们似乎可以受活动函数的支配,即。我们只能在没有活动功能运行的情况下部署?
保罗

6ju8rftf

6ju8rftf1#

在持久函数中,一旦活动函数启动,就没有内置机制来强制停止它。
在部署情况下,您需要更新业务流程或活动功能的代码,可以使用以下策略
1.版本:您可以查看持久功能的版本。在部署新版本时,请创建新版本的业务流程和活动功能。这允许您为新示例运行新代码,同时仍然允许现有示例使用旧代码完成。您可以使用代理和插槽组合来控制这一点。
1.手动干预:如果您确实需要强制停止Activity函数,则可能需要实现自定义机制。这可能涉及到在业务流程数据/数据库中设置一个标志,指示活动功能提前终止。就像存储在数据库中的取消标志一样。但是,这可能很复杂,可能无法保证立即终止。
以下是示例实现。请注意,这是一个基本的说明,可能需要进一步完善,以供生产使用。
1.我们将创建一个类来表示Cosmos DB中的文档。这个类应该包含一个标志来表示终止:

public class WorkflowStatus
{
    public string Id { get; set; }
    public bool ShouldTerminate { get; set; }
}

1.在您的协调器功能中,我们可以定期检查Cosmos DB文档,以确定是否请求终止:

[FunctionName("OrchestratorFunction")]
public static async Task<string> RunOrchestrator(
    [OrchestrationTrigger] DurableOrchestrationContext context)
{
    while (true)
    {
        // Check the Cosmos DB document for the termination flag
        var workflowStatus = await context.CallActivityAsync<WorkflowStatus>("CheckTerminationFlag", null);

        if (workflowStatus.ShouldTerminate)
        {
            // Terminate the orchestration early
            return "Terminated";
        }

        // Your orchestration logic here

        // Optionally, add a delay between checks
        await context.CreateTimer(DateTime.UtcNow.AddMinutes(5), CancellationToken.None);
    }
}

1.创建一个activity函数来检查Cosmos DB中的终止标志:

[FunctionName("CheckTerminationFlag")]
public static WorkflowStatus CheckTerminationFlag(
    [ActivityTrigger] DurableActivityContext context)
{
    // Retrieve the document from Cosmos DB
    // Check the flag and return the WorkflowStatus object
    // Be sure to handle exceptions and errors appropriately
}

1.实现一个单独的过程或工具,可以在需要手动干预时更新Cosmos DB文档以设置ShouldTerminate标志。
这是一个简化的示例,在实际场景中,您需要处理错误和重试。

相关问题