首页 > 解决方案 > 以编程方式停止 azure 函数

问题描述

嗨,我了解,如果我创建一个由队列中的 msg 触发的 azure 函数,如果队列中有多个消息,则可以横向扩展(水平)。换句话说,可以运行同一个 azure 函数的多个实例处理队列中的味精。

我也知道在天蓝色函数中我可以获得正在运行的实例的 ID。让我们假设当我的 azure 函数的实例启动时,我将正在运行的实例的 ID 存储在数据库中。

现在,我的问题是,如何以编程方式停止/终止我的 azure 函数的特定实例(由存储的 ID 标识)?

提前致谢!!

情景

我有一个仪表板供我的用户使用。他们可以在哪里创建任务。创建任务后,定义将与用户 ID 一起作为消息进入队列。一旦队列中的消息可用,就会触发 azure 函数。现在,当用户刷新仪表板时,她/他会看到任务列表(由他/她创建),无论它们是正在运行还是已完成。我现在需要给他们一个选项来停止正在运行的任务。

现在,多个用户可以创建具有不同参数的任务,在同一个队列中发送多个消息,这将导致运行同一个 azure 函数的多个实例。每个实例都与特定用户绑定。如果用户选择停止任务(这是同一个 azure 函数的实例),我需要停止 azure 函数的特定实例(与禁用整个 azure 函数不同)。现在我只知道一个正在运行的实例是 ID ,我想知道是否可以从代码中停止/杀死/取消该特定函数实例。

我希望我成功地解释了我的情况。如果您有更多问题,请告诉我。

标签: azureazure-functions

解决方案


今天没有办法做到这一点。即使您要杀死一个实例,Functions Scale Controller 也可能会看到您需要更多实例来处理并为您启动另一个实例。

完全理解这里的场景会很好——你是否试图限制横向扩展?还是停止个别失控功能?

编辑:阅读您的方案后,您是否查看过持久功能?您应该能够根据队列消息启动编排并使用 OrchestrationClient 管理它们。需要注意的是,活动功能一旦启动就无法取消,但如果您充分分解步骤,您将能够终止进程内编排。有关更多详细信息,请参见此处:


推荐阅读