У нас есть очередь хранилища 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
, но на самом деле этого не происходит, потому что исключение не распространяется через клиент оркестратора. Любые предложения о том, как вернуть это исключение в функцию вызывающего абонента, которая запускается по очереди, чтобы полезная нагрузка появлялась в очереди подозрительных сообщений?