You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Http Trigger向运行中的Azure Durable Orchestrator传递新API Token?使用外部事件是否为最优解?

最佳方案:使用外部事件更新运行中Orchestrator的Token

绝对是的——发送外部事件正是解决你这个Token过期问题的最佳方案,完全贴合Azure Durable Functions的设计理念。

为什么这是最优选择?

Durable Orchestrator的执行是确定性的,你不能直接修改它的初始输入或内部状态。而外部事件机制就是官方专门设计的、用于在Orchestrator运行期间从外部传递动态更新信息的标准方式——正好匹配你需要定期刷新Token的场景:每次轮询Http Trigger时,发送新的Token作为外部事件,Orchestrator监听这个事件并更新自身持有的Token值,后续的Activity调用就会使用最新的有效Token。

简单实现示例(Python)

1. 在Http Trigger中发送外部事件

修改你的轮询接口,加入发送Token更新事件的逻辑:

import azure.functions as func
from azure.durable_functions import DurableOrchestrationClient

async def main(req: func.HttpRequest, starter: str) -> func.HttpResponse:
    client = DurableOrchestrationClient(starter)
    # 获取要更新的实例ID和新Token
    instance_id = req.params.get('instanceId')
    new_token = req.params.get('newToken')
    
    if not instance_id or not new_token:
        return func.HttpResponse("Missing required parameters: instanceId or newToken", status_code=400)
    
    # 发送Token更新事件,事件名称自定义(比如"TokenUpdated")
    await client.raise_event(instance_id, "TokenUpdated", new_token)
    return func.HttpResponse("Token update event sent successfully")

2. 在Orchestrator中监听并处理事件

调整Orchestrator的逻辑,让它在运行期间监听Token更新事件,实时更新Token:

from azure.durable_functions import DurableOrchestrationContext

def orchestrator_function(context: DurableOrchestrationContext):
    # 初始化Token为初始输入值
    current_token = context.get_input()
    
    # 假设你的Orchestrator是长期运行的循环任务
    while True:
        # 同时等待两个任务:执行业务Activity,或者接收Token更新事件
        task_group = context.task_all([
            context.call_activity("YourBusinessActivity", current_token),
            context.wait_for_external_event("TokenUpdated")
        ])
        
        # 等待任一任务完成
        results = yield task_group
        
        # 检查是否收到Token更新事件
        if results[1] is not None:
            # 更新Token为最新值
            current_token = results[1]
            # 可选:如果当前Activity还在运行,可以考虑取消并重新启动(根据业务需求)
        else:
            # 业务Activity完成,退出循环
            break
    
    return "Orchestration completed successfully"

关键注意事项

  • 确保Activity使用最新Token:每次调用Activity时,都要传入更新后的current_token,避免使用过期值。
  • 处理长时间运行的Activity:如果你的Activity执行时间较长,可能需要在收到新Token时中断当前Activity(通过context.cancel_task),然后用新Token重新启动,或者让Activity本身支持重试时获取最新Token。
  • 事件可靠性:Durable Functions会自动保存未处理的外部事件,直到Orchestrator准备好处理它,不用担心轮询时发送的事件丢失。

内容的提问来源于stack exchange,提问作者isic5

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 10:47:41