Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Domyślnie rozszerzenie Durable Functions używa środowiska uruchomieniowego usługi Azure Functions do hostowania aranżacji. Mogą jednak istnieć pewne scenariusze, w których potrzebna jest większa kontrola nad kodem, który nasłuchuje zdarzeń. W tym artykule pokazano, jak zaimplementować aranżację przy użyciu zestawu SDK usługi WebJobs. Aby wyświetlić bardziej szczegółowe porównanie funkcji i zadań WebJob, zobacz Porównanie funkcji i zadań WebJob.
Usługi Azure Functions i rozszerzenie Durable Functions są oparte na zestawie SDK usługi WebJobs. Hostem zadań w zestawie SDK zadań WebJobs jest środowisko uruchomieniowe w usłudze Azure Functions. Jeśli musisz kontrolować zachowanie w sposób, który nie jest możliwy w usłudze Azure Functions, możesz samodzielnie opracowywać i uruchamiać rozszerzenie Durable Functions przy użyciu zestawu SDK usługi WebJobs.
W wersji 3.x zestawu SDK usługi WebJobs host jest implementacją IHost
elementu , a w wersji 2.x jest używany JobHost
obiekt .
Przykład rozszerzenia Durable Functions jest dostępny w wersji 2.x zestawu WebJobs SDK: pobierz lub sklonuj repozytorium Durable Functions, a następnie wyewidencjonuj gałąź v1 i przejdź do folderu samples\webjobssdk\chaining .
Wymagania wstępne
W tym artykule założono, że znasz podstawy zestawu SDK zadań WebJobs, programowania bibliotek klas języka C# dla usługi Azure Functions i rozszerzenia Durable Functions. Jeśli potrzebujesz wprowadzenia do tych pojęć, zobacz następujące zasoby:
- Wprowadzenie do zestawu SDK zadań WebJobs
- Tworzenie pierwszej funkcji przy użyciu programu Visual Studio
- Durable Functions
Aby wykonać kroki opisane w tym artykule:
Zainstaluj program Visual Studio 2019 z pakietem roboczym Programowanie na platformie Azure.
Jeśli masz już program Visual Studio, ale nie masz tego obciążenia, dodaj obciążenie, wybierając pozycję Narzędzia Pobierz narzędzia>i funkcje.
(Możesz użyć polecenia Zamiast tego program Visual Studio Code , ale niektóre instrukcje są specyficzne dla programu Visual Studio).
Zainstaluj i uruchom emulator magazynu Azurite. Alternatywą jest zaktualizowanie pliku App.config przy użyciu rzeczywistego parametry połączenia usługi Azure Storage.
Wersje zestawu SDK usługi WebJobs
W tym artykule wyjaśniono, jak opracować projekt zestawu SDK 2.x usługi WebJobs (odpowiednik usługi Azure Functions w wersji 1.x). Aby uzyskać informacje o wersji 3.x, zobacz zestaw WebJobs SDK 3.x w dalszej części tego artykułu.
Tworzenie aplikacji konsolowej
Aby uruchomić rozszerzenie Durable Functions jako zadania WebJob, musisz najpierw utworzyć aplikację konsolową. Projekt zestawu SDK usługi WebJobs to tylko projekt aplikacji konsolowej z zainstalowanymi odpowiednimi pakietami NuGet.
W oknie dialogowym Nowy projekt programu Visual Studio wybierz pozycję Klasyczna aplikacja konsoli klasycznej>systemu Windows (.NET Framework). W pliku TargetFrameworkVersion
projektu element powinien mieć wartość v4.6.1
.
Program Visual Studio ma również szablon projektu zadania WebJob, którego można użyć, wybierając pozycję Cloud>Azure WebJob (.NET Framework). Ten szablon instaluje wiele pakietów, z których niektóre mogą nie być potrzebne.
Instalowanie pakietów NuGet
Potrzebujesz pakietów NuGet dla zestawu SDK zadań WebJobs, powiązań podstawowych, struktury rejestrowania i rozszerzenia Durable Task. Poniżej przedstawiono Menedżer pakietów polecenia konsoli dla tych pakietów z najnowszymi stabilnymi numerami wersji zgodnie z datą napisaną w tym artykule:
Install-Package Microsoft.Azure.WebJobs.Extensions -version 2.2.0
Install-Package Microsoft.Extensions.Logging -version 2.0.1
Install-Package Microsoft.Azure.WebJobs.Extensions.DurableTask -version 1.8.7
Potrzebujesz również dostawców rejestrowania. Następujące polecenia instalują dostawcę aplikacja systemu Azure Insights i .ConfigurationManager
Umożliwia ConfigurationManager
uzyskanie klucza instrumentacji usługi Application Insights z ustawień aplikacji.
Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -version 2.2.0
Install-Package System.Configuration.ConfigurationManager -version 4.4.1
Następujące polecenie instaluje dostawcę konsoli:
Install-Package Microsoft.Extensions.Logging.Console -version 2.0.1
Kod JobHost
Po utworzeniu aplikacji konsolowej i zainstalowaniu potrzebnych pakietów NuGet możesz użyć rozszerzenia Durable Functions. W tym celu należy użyć kodu JobHost.
Aby użyć rozszerzenia Durable Functions, wywołaj UseDurableTask
JobHostConfiguration
obiekt w metodzie Main
:
var config = new JobHostConfiguration();
config.UseDurableTask(new DurableTaskExtension
{
HubName = "MyTaskHub",
};
Aby uzyskać listę właściwości, które można ustawić w DurableTaskExtension
obiekcie, zobacz host.json.
Metoda Main
jest również miejscem konfigurowania dostawców rejestrowania. Poniższy przykład umożliwia skonfigurowanie konsoli i dostawców usługi Application Insights.
static void Main(string[] args)
{
using (var loggerFactory = new LoggerFactory())
{
var config = new JobHostConfiguration();
config.DashboardConnectionString = "";
var instrumentationKey =
ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
config.LoggerFactory = loggerFactory
.AddApplicationInsights(instrumentationKey, null)
.AddConsole();
config.UseTimers();
config.UseDurableTask(new DurableTaskExtension
{
HubName = "MyTaskHub",
});
var host = new JobHost(config);
host.RunAndBlock();
}
}
Funkcje
Rozszerzenie Durable Functions w kontekście zadań WebJob różni się nieco od rozszerzenia Durable Functions w kontekście usługi Azure Functions. Ważne jest, aby pamiętać o różnicach podczas pisania kodu.
Zestaw SDK usługi WebJobs nie obsługuje następujących funkcji usługi Azure Functions:
Atrybut FunctionName
W projekcie zestawu SDK usługi WebJobs nazwa metody funkcji to nazwa funkcji. Atrybut FunctionName
jest używany tylko w usłudze Azure Functions.
Wyzwalacz HTTP
Zestaw SDK usługi WebJobs nie ma wyzwalacza HTTP. Klient orkiestracji przykładowego projektu używa wyzwalacza czasomierza:
public static async Task CronJob(
[TimerTrigger("0 */2 * * * *")] TimerInfo timer,
[OrchestrationClient] DurableOrchestrationClient client,
ILogger logger)
{
...
}
Interfejs API zarządzania HTTP
Ponieważ nie ma wyzwalacza HTTP, zestaw SDK usługi WebJobs nie ma interfejsu API zarządzania HTTP.
W projekcie zestawu SDK usługi WebJobs można wywoływać metody w obiekcie klienta orkiestracji, zamiast wysyłać żądania HTTP. Następujące metody odpowiadają trzem zadaniam, które można wykonać za pomocą interfejsu API zarządzania HTTP:
GetStatusAsync
RaiseEventAsync
TerminateAsync
Funkcja klienta orkiestracji w przykładowym projekcie uruchamia funkcję orkiestratora, a następnie przechodzi do pętli, która wywołuje co GetStatusAsync
2 sekundy:
string instanceId = await client.StartNewAsync(nameof(HelloSequence), input: null);
logger.LogInformation($"Started new instance with ID = {instanceId}.");
DurableOrchestrationStatus status;
while (true)
{
status = await client.GetStatusAsync(instanceId);
logger.LogInformation($"Status: {status.RuntimeStatus}, Last update: {status.LastUpdatedTime}.");
if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed ||
status.RuntimeStatus == OrchestrationRuntimeStatus.Failed ||
status.RuntimeStatus == OrchestrationRuntimeStatus.Terminated)
{
break;
}
await Task.Delay(TimeSpan.FromSeconds(2));
}
Uruchamianie aplikacji przykładowej
Masz skonfigurowaną usługę Durable Functions do uruchamiania jako zadanie WebJob, a teraz masz wiedzę na temat tego, jak będzie to różnić się od uruchamiania rozszerzenia Durable Functions jako autonomicznej usługi Azure Functions. W tym momencie obserwowanie pracy w przykładzie może być przydatne.
Ta sekcja zawiera omówienie sposobu uruchamiania przykładowego projektu. Aby uzyskać szczegółowe instrukcje, które wyjaśniają, jak uruchomić projekt zestawu SDK usługi WebJobs lokalnie i wdrożyć go w ramach zadania WebJob platformy Azure, zobacz Rozpoczynanie pracy z zestawem SDK zadań WebJobs.
Uruchamianie polecenia w środowisku lokalnym
Upewnij się, że emulator magazynu jest uruchomiony (zobacz Wymagania wstępne).
Jeśli chcesz wyświetlić dzienniki w usłudze Application Insights podczas lokalnego uruchamiania projektu:
a. Utwórz zasób usługi Application Insights i użyj dla niego typu aplikacji Ogólne .
b. Zapisz klucz instrumentacji w pliku App.config .
Uruchamianie projektu.
Uruchamianie na platformie Azure
Utwórz aplikację internetową i konto magazynu.
W aplikacji internetowej zapisz informacje o połączeniu magazynu w ustawieniu aplikacji o nazwie
AzureWebJobsStorage
. W przypadku najwyższego poziomu zabezpieczeń należy użyć połączenia tożsamości zarządzanej z kontem magazynu.Utwórz zasób usługi Application Insights i użyj dla niego typu aplikacji Ogólne .
Zapisz klucz instrumentacji w ustawieniu aplikacji o nazwie
APPINSIGHTS_INSTRUMENTATIONKEY
.Wdrażanie jako zadania WebJob.
Zestaw SDK usługi WebJobs w wersji 3.x
W tym artykule wyjaśniono, jak opracować projekt zestawu WebJobs SDK 2.x. Jeśli tworzysz projekt zestawu WebJobs SDK 3.x , ta sekcja ułatwia zrozumienie różnic.
Główną zmianą jest użycie platformy .NET Core zamiast programu .NET Framework. Aby utworzyć projekt zestawu WebJobs SDK 3.x, instrukcje są takie same, z następującymi wyjątkami:
Utwórz aplikację konsolową platformy .NET Core. W oknie dialogowym Nowy projekt programu Visual Studio wybierz pozycję Aplikacja konsolowa platformy .NET Core>(.NET Core). Plik projektu określa, że
TargetFramework
tonetcoreapp2.x
.Wybierz wersję wersji zestawu WebJobs SDK 3.x następujących pakietów:
Microsoft.Azure.WebJobs.Extensions
Microsoft.Azure.WebJobs.Extensions.Storage
Microsoft.Azure.WebJobs.Logging.ApplicationInsights
Ustaw parametry połączenia magazynu i klucz instrumentacji usługi Application Insights w pliku appsettings.json przy użyciu platformy konfiguracji platformy .NET Core. Oto przykład:
{ "AzureWebJobsStorage": "<replace with storage connection string>", "APPINSIGHTS_INSTRUMENTATIONKEY": "<replace with Application Insights instrumentation key>" }
Ważne
W przypadku najwyższego poziomu zabezpieczeń należy użyć połączenia tożsamości zarządzanej z kontem magazynu. Aby uzyskać więcej informacji, zobacz How to use managed identities for App Service and Azure Functions (Jak używać tożsamości zarządzanych dla usług App Service i Azure Functions).
Zmień kod metody,
Main
aby to zrobić. Oto przykład:static void Main(string[] args) { var hostBuilder = new HostBuilder() .ConfigureWebJobs(config => { config.AddAzureStorageCoreServices(); config.AddAzureStorage(); config.AddTimers(); config.AddDurableTask(options => { options.HubName = "MyTaskHub"; options.AzureStorageConnectionStringName = "AzureWebJobsStorage"; }); }) .ConfigureLogging((context, logging) => { logging.AddConsole(); logging.AddApplicationInsights(config => { config.InstrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"]; }); }) .UseConsoleLifetime(); var host = hostBuilder.Build(); using (host) { host.Run(); } }
Następne kroki
Aby dowiedzieć się więcej na temat zestawu SDK usługi WebJobs, zobacz How to use the WebJobs SDK (Jak używać zestawu SDK usługi WebJobs).