Функция Azure на основе таймера с хранилищем таблиц, HTTP-запросом и служебной шиной Azure. - PullRequest
1 голос
/ 08 ноября 2019

У меня сейчас есть процесс, написанный в консольном приложении, который запускает запланированное задание для чтения данных из хранилища таблиц Azure и на основе этих данных делает вызовы API стороннему поставщику, которого мы используем, десериализуем данные ответа, зацикливаюсьв массиве результатов сохраните отдельные итерации цикла в другой таблице в хранилище таблиц Azure, а затем опубликуйте сообщения для каждой итерации цикла на служебной шине Azure, где эти сообщения используются другим клиентом.

В попытке перенести больше наших задач в облако я провел некоторое исследование, и кажется, что функция Azure была бы хорошим кандидатом для замены моего консольного приложения. Я развернул новый проект функции Azure в Visual Studio 2019 как функцию «таймера», а затем углубился в чтение, где я очень быстро заблудился.

Чтение, которое я прочитал, говорит об использовании «привязок» в моих аргументах метода Run (), украшенных атрибутами для строк подключения и т. Д., Но я не уверен, что это направление, в котором я должен идти. Похоже, это облегчило бы аутентификацию в моем хранилище таблиц, но я не могу понять, как использовать эти «крючки» для запроса моей таблицы и затем выполнения вставок. Я еще даже не разбирался в служебной шине и не пытался делать HTTP-вызовы для API нашего стороннего поставщика.

Я знаю, что это очень широкий вопрос, и у меня нет кода для публикации, потому чтоМне тяжело даже выходить из стартовых блоков с этим. Документация по MS приведена по всей карте, и я не могу найти ничего конкретного для своих нужд, и я обещаю, что потратил немало времени, пытаясь.

Являются ли функции Azure правильным путем, по которому я должен идти? Если нет, какие еще варианты есть?

TIA

1 Ответ

4 голосов
/ 08 ноября 2019

Вам следует использовать функции Azure с триггером времени, чтобы заменить консольное приложение.

Привязки (которые можно использовать для ввода / вывода) помогают сэкономить некоторые строки кода, например:

Вместо того, чтобы использовать следующий код для вставки данных в таблицу Azure:

// Retrieve storage account information from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);

// Create a table client for interacting with the table service
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());

// Create a table client for interacting with the table service 
CloudTable table = tableClient.GetTableReference("MyTable");

//some code to populate an entity
var entity = new { PartitionKey = "Http", RowKey = Guid.NewGuid().ToString(), Text = input.Text };

// Create the InsertOrReplace table operation
TableOperation insertOrMergeOperation = TableOperation.InsertOrMerge(entity);

// Execute the operation.
TableResult result = await table.ExecuteAsync(insertOrMergeOperation);

вы должны использовать:

[FunctionName("TableOutput")]
[return: Table("MyTable")]
public static MyPoco TableOutput([HttpTrigger] dynamic input, ILogger log)
{
    log.LogInformation($"C# http trigger function processed: {input.Text}");
    return new MyPoco { PartitionKey = "Http", RowKey = Guid.NewGuid().ToString(), Text = input.Text };
}

PS: триггер ввода в предыдущем кодеявляется триггером HTTP, но он должен был только объяснить, как использовать привязку вывода.

Более подробную информацию можно найти здесь:

https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings

https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-table

и вы должны смотреть: https://docs.microsoft.com/en-us/learn/modules/chain-azure-functions-data-using-bindings/

...