处理 errors/failures 发生在由队列触发的 Azure Functions 调用的 Azure Durable Functions 中
Handling errors/failures occurred in Azure Durable Functions called by queue-triggered Azure Functions
我们有一个 Azure 存储队列,一旦 payload/message 到达队列就会触发一个 azure 函数。队列触发函数调用另一个持久函数来处理 message/payload.
这是代码片段:
[FunctionName("QueueTriggerFunction")]
public Task QueueTriggerFunction(
[QueueTrigger("MyQueue", Connection = "MyStorage")]string item,
[OrchestrationClient] DurableOrchestrationClient client,
ILogger log)
=> client.StartNewAsync("Processor", JsonConvert.DeserializeObject<MyObject>(item));
持久函数类似于以下代码示例:
[FunctionName("Processor")]
public async Task ConcurrencyProcessorAsync(
[OrchestrationTrigger] DurableOrchestrationContext context,
ILogger log)
{
var myObject= context.GetInput<MyObject>();
if(ObjectProcessor(myObject) == false)
{
throw new Exception("Processor failed");
}
}
如果在 ObjectProcessor
方法失败时引发上述异常,我希望负载最终进入毒消息队列,但实际上并没有发生,因为异常不会通过协调器冒泡客户。关于如何将此异常抛回给调用者函数的任何建议,调用者函数是队列触发的,以使有效负载出现在毒消息队列中?
你不能。
QueueTriggerFunction
刚刚开始Orchestration
。之后它的生命周期结束。
我相信您可以使用 Azure Storage Services REST API or this .Net library
直接将有效负载添加到毒物队列
请注意毒药队列的名称== $"{queueName}-poison"
我们有一个 Azure 存储队列,一旦 payload/message 到达队列就会触发一个 azure 函数。队列触发函数调用另一个持久函数来处理 message/payload.
这是代码片段:
[FunctionName("QueueTriggerFunction")]
public Task QueueTriggerFunction(
[QueueTrigger("MyQueue", Connection = "MyStorage")]string item,
[OrchestrationClient] DurableOrchestrationClient client,
ILogger log)
=> client.StartNewAsync("Processor", JsonConvert.DeserializeObject<MyObject>(item));
持久函数类似于以下代码示例:
[FunctionName("Processor")]
public async Task ConcurrencyProcessorAsync(
[OrchestrationTrigger] DurableOrchestrationContext context,
ILogger log)
{
var myObject= context.GetInput<MyObject>();
if(ObjectProcessor(myObject) == false)
{
throw new Exception("Processor failed");
}
}
如果在 ObjectProcessor
方法失败时引发上述异常,我希望负载最终进入毒消息队列,但实际上并没有发生,因为异常不会通过协调器冒泡客户。关于如何将此异常抛回给调用者函数的任何建议,调用者函数是队列触发的,以使有效负载出现在毒消息队列中?
你不能。
QueueTriggerFunction
刚刚开始Orchestration
。之后它的生命周期结束。
我相信您可以使用 Azure Storage Services REST API or this .Net library
直接将有效负载添加到毒物队列请注意毒药队列的名称== $"{queueName}-poison"