У меня есть функция Azure (f1), которая принимает документы Cosmos DB в качестве входных данных, и я хочу указать путь для перенаправления любых документов в очередь шины обслуживания Azure в случае сбоя, который может произойти в нисходящем направлении (оператор SQL дляSQL Server) возможно.Затем я хочу запустить функцию Azure (f2) на таймере, который будет служить «очисткой» для любого из этих перенаправленных документов, и попытаться сделать то же самое, что и f1.
Я былсмог отправить один документ или несколько документов в очередь ServiceBus, но я смог успешно обработать ввод из очереди в f2 только тогда, когда это был один документ.Обратите внимание, что f2 находится на триггере, и я все еще не уверен, как даже прочитать очередь из функции Azure?Как мне выполнить итерацию всей очереди сообщений в одной функции?Привязки показывают, что ServiceBus не является допустимым «Вводом» для функций Azure, хотя он действителен как триггер.https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings
С чем я работаю ниже:
f1 с одним выходом
#r "Microsoft.Azure.Documents.Client"
#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
public static void Run(IReadOnlyList<Document> inputFeed, TraceWriter log,
out Document outputSbQueue)
{
//f1 with a single output to a Queue
}
f1 с выходом ICollector
#r "Microsoft.Azure.Documents.Client"
#r "Microsoft.ServiceBus"
using Microsoft.ServiceBus.Messaging;
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
public static void Run(IReadOnlyList<Document> inputFeed, TraceWriter log,
ICollector<Document> outputSbQueue)
{
//f1 with an ICollector output
}
f2 с одним входом от триггера ServiceBus (работает)
#r "Microsoft.Azure.Documents.Client"
#r "Newtonsoft.Json"
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
public static void Run(Document myQueueItem, TraceWriter log)
{
//f2 with a working single input -- myQueueItem is an SB trigger
}
f2 с ICollector или любым видом ввода IEnumerable (не работает ... выдает исключение о сериализации JSon во время выполнения)
#r "Microsoft.Azure.Documents.Client"
#r "Newtonsoft.Json"
using Microsoft.Azure.Documents;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
public static void Run(IReadOnlyList<Document> myQueueItem, TraceWriter log)
{
//f2 with an input of more than one document
}
выдает это исключение:
2018-05-15T20: 48: 21.535 [Ошибка] Исключение при выполнении функции: Functions.ServiceBusQueueTriggerCSharp1.Microsoft.Azure.WebJobs.Host: параметр привязки исключения 'myQueueItem'.Microsoft.Azure.WebJobs.ServiceBus: привязка параметров к сложным объектам (например, 'ICollector 1') uses Json.NET serialization.
1. Bind the parameter type as 'string' instead of 'ICollector
1', чтобы получить необработанные значения и избежать десериализации JSON, или 2. Измените полезную нагрузку очереди на допустимый json. Сбой синтаксического анализа JSON:Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип «Microsoft.Azure.WebJobs.ICollector`1 [Microsoft.Azure.Documents.Document]», поскольку для типа требуется объект JSON (например, имя {)":" value "}) для правильной десериализации. Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {" name ":" value "}), либо измените десериализованный тип на массив или тип, реализующий коллекциюинтерфейс (например, ICollection, IList), такой как List, который можно десериализовать из массива JSON. JsonArrayAttribute также можно добавить к типу, чтобы заставить его десериализовать из массива JSON. Path '', строка 1, позиция 1.
Я - полный новичок в работе с JSON, сериализацией и десериализацией. Я просто хочу разобрать его, прочитать что-то из него и получить SQL-оператор.ады отправить вниз по течению.