我们有一个Azure存储队列,一旦负载/消息到达队列,该队列就会触发azure功能。触发队列的函数调用另一个持久函数来处理消息/有效载荷。
这是代码段:
[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
方法失败时引发,我希望有效载荷最终进入有毒消息队列,但实际上不会发生,因为该异常不会在协调器客户端中冒泡。关于如何使此异常返回到调用方函数的任何建议,调用方函数是一个队列触发的函数,以使有效负载出现在有毒消息队列中?
答案 0 :(得分:1)
你不能。
QueueTriggerFunction
仅启动Orchestration
。之后,生命周期结束。
我相信您可以使用Azure Storage Services REST API或此.Net library
将您的有效载荷直接添加到中毒队列中请注意,毒药队列的名称== $"{queueName}-posion"