Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Durable Functions, dayanıklı düzenlemelerin ve varlıkların HTTP iş akışlarına dahil olmasını kolaylaştıran çeşitli özelliklere sahiptir. Bu makalede bu özelliklerden bazıları hakkında ayrıntılı bilgi verilmektedir.
HTTP API'lerini kullanıma sunma
Düzenleme ve varlıklar HTTP istekleri kullanılarak çağrılabilir ve yönetilebilir. Durable Functions uzantısı yerleşik HTTP API'lerini kullanıma sunar. Ayrıca, HTTP tetiklemeli işlevlerden orkestrasyonlar ve varlıklarla etkileşim sağlamak için API'ler sağlar.
Yerleşik HTTP API'leri
Durable Functions uzantısı, Azure Functions konağına otomatik olarak bir HTTP API'leri kümesi ekler. Bu API'lerle, herhangi bir kod yazmadan düzenlemelerle ve varlıklarla etkileşimde bulunabilir ve bunları yönetebilirsiniz.
Aşağıdaki yerleşik HTTP API'leri desteklenir.
- Yeni düzenlemeyi başlat
- Orkestrasyon sorgu örneği
- Düzenleme örneğini sonlandırma
- Orkestrasyona dış olay gönderme
- Orkestrasyon geçmişini temizleme
- Bir varlığa işlem olayı gönderme
- Varlığın durumunu alma
- Varlık listesini sorgulama
Durable Functions uzantısı tarafından kullanıma sunulan tüm yerleşik HTTP API'lerinin tam açıklaması için HTTP API'ler makalesine bakın.
HTTP API URL'si bulma
Orkestrasyon istemci bağlaması, uygun HTTP yanıt yükleri oluşturabilen API'leri kullanıma sunar. Örneğin, belirli bir düzenleme örneği için yönetim API'lerine bağlantılar içeren bir yanıt oluşturabilir. Aşağıdaki örneklerde, yeni bir düzenleme örneği için bu API'nin nasıl kullanılacağını gösteren bir HTTP tetikleyici işlevi gösterilmektedir:
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
namespace VSSample
{
public static class HttpStart
{
[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
[DurableClient] IDurableClient starter,
string functionName,
ILogger log)
{
// Function input comes from the request content.
object eventData = await req.Content.ReadAsAsync<object>();
string instanceId = await starter.StartNewAsync(functionName, eventData);
log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
return starter.CreateCheckStatusResponse(req, instanceId);
}
}
}
Tip
Eğer aynı işlev uygulamasında birden fazla HTTP ile tetiklenen başlatıcı işlev varsa, yol çakışmalarını önlemek için her işlev için benzersiz bir route yapılandırması yapın. gibi orchestrators/{functionName} parametreli bir yol kullanmak (önceki örneklerin birkaçında gösterildiği gibi) tek bir HTTP starter işlevinin herhangi bir düzenleyiciyi ada göre başlatmasını sağlar. Bu genellikle en basit yaklaşımdır.
Daha önce gösterilen HTTP tetikleyici işlevlerini kullanarak bir orchestrator işlevi başlatmak herhangi bir HTTP istemcisi kullanılarak yapılabilir. Aşağıdaki cURL komutu DoWork adlı bir orchestrator işlevi başlatır:
curl -X POST https://localhost:7071/orchestrators/DoWork -H "Content-Length: 0" -i
İşte kimliği abc123 olan bir orkestrasyon için örnek bir yanıt. Netlik sağlamak için bazı ayrıntılar kaldırıldı.
HTTP/1.1 202 Accepted
Content-Type: application/json; charset=utf-8
Location: http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX
Retry-After: 10
{
"id": "abc123",
"purgeHistoryDeleteUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
"sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/raiseEvent/{eventName}?code=XXX",
"statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123?code=XXX",
"terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/abc123/terminate?reason={text}&code=XXX"
}
Önceki örnekte, ile biten Uri alanların her biri yerleşik bir HTTP API'sine karşılık gelir. Hedef düzenleme örneğini yönetmek için bu API'leri kullanabilirsiniz.
Uyarı
Web kancası URL'lerinin biçimi, Azure Functions konağın hangi sürümünü çalıştırdığınıza bağlıdır. Önceki örnek, Azure Functions 2.0 konağı içindir.
Tüm yerleşik HTTP API'lerinin açıklaması için bkz. HTTP API başvurusu.
Asenkron operasyon takibi
Daha önce bahsedilen HTTP yanıtı, Durable Functions ile uzun süre çalışan HTTP zaman uyumsuz API'lerinin uygulanmasına yardımcı olmak için tasarlanmıştır. Bu desen bazen sorgulama tüketici deseni olarak adlandırılır. İstemci/sunucu akışı aşağıdaki gibi çalışır:
- İstemci, orchestrator işlevi gibi uzun süre çalışan bir işlem başlatmak için bir HTTP isteğinde bulunur.
- Hedef HTTP tetikleyicisi, "statusQueryGetUri" değerine sahip bir Konum üst bilgisine sahip bir HTTP 202 yanıtı döndürür.
- İstemci, Konum üst bilgisindeki URL'yi sorgular. İstemci, Konum üst bilgisi olan HTTP 202 yanıtlarını görmeye devam eder.
- Örnek tamamlandığında veya başarısız olduğunda, Konum üst bilgisindeki uç nokta HTTP 200 döndürür.
Bu protokol, bir HTTP uç noktasını yoklayıp Konum üst bilgisini takip eden dış istemciler veya hizmetlerle uzun süre çalışan işlemlerin koordinasyonunu sağlar. Bu desenin hem istemci hem de sunucu uygulamaları Durable Functions HTTP API'lerinde yerleşiktir.
Uyarı
Varsayılan olarak, Azure Logic Apps tarafından sağlanan tüm HTTP tabanlı eylemler standart zaman uyumsuz işlem düzenini destekler. Bu özellik, Logic Apps iş akışının parçası olarak uzun süre çalışan bir dayanıklı işlev eklemeyi mümkün kılar. Azure Logic Apps iş akışı eylemleri ve tetikleyicileri belgelerinde zaman uyumsuz HTTP desenleri için Logic Apps desteği hakkında daha fazla ayrıntı bulabilirsiniz.
Uyarı
Düzenlemelerle etkileşimler yalnızca HTTP ile tetiklenen işlevlerle değil, herhangi bir işlev türünden gerçekleştirilebilir.
İstemci API'lerini kullanarak düzenleme ve varlıkları yönetme hakkında daha fazla bilgi için Örnek yönetimi makalesine bakın.
HTTP API'lerini kullanma
Orchestrator kod kısıtlamalarında açıklandığı gibi, orchestrator işlevleri doğrudan G/Ç yapamaz. Bunun yerine genellikle G/Ç işlemleri gerçekleştiren etkinlikleri çağırırlar.
Durable Functions 2.0'dan başlayarak, orkestrasyonlar orkestrasyon tetikleyici bağlaması kullanarak HTTP API'lerini yerel olarak tüketebilir.
Aşağıdaki örnek kod, giden HTTP isteğinde bulunan bir orchestrator işlevini gösterir:
[FunctionName(nameof(CheckSiteAvailable))]
public static async Task CheckSiteAvailable(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
Uri url = context.GetInput<Uri>();
// Makes an HTTP GET request to the specified endpoint
DurableHttpResponse response =
await context.CallHttpAsync(HttpMethod.Get, url);
if (response.StatusCode >= 400)
{
// handling of error codes goes here
}
}
Uyarı
Bu özelliğin neden yerleşik .NET HttpRequestMessage ve HttpResponseMessage türleri yerine DurableHttpRequest ve DurableHttpResponse türlerini kullandığını merak ediyor olabilirsiniz.
Bu tasarım seçimi kasıtlıdır. Bunun birincil nedeni, özel türlerin kullanıcıların iç HTTP istemcisinin desteklenen davranışları hakkında yanlış varsayımlarda bulunmamasını sağlamaya yardımcı olmasıdır. Durable Functions özgü türler, API tasarımını basitleştirmeyi de mümkün hale getirir. Ayrıca yönetilen kimlik entegrasyonu ve polling tüketici deseni gibi özel özellikleri daha kolay kullanılabilir hale getirir.
"HTTP'yi çağır" eylemini kullanarak düzenleyici işlevlerinizde aşağıdaki eylemleri gerçekleştirebilirsiniz:
- HTTP API'lerini daha sonra bahsedilen bazı sınırlamalarla doğrudan düzenleme işlevlerinden çağırabilirsiniz.
- İstemci tarafı HTTP 202 durum yoklama desenlerini otomatik olarak destekler.
- Diğer Azure uç noktalarına yetkili HTTP çağrıları yapmak için Azure Yönetilen Kimlikler kullanın.
HTTP API'lerini doğrudan orchestrator işlevlerinden kullanma özelliği, belirli bir ortak senaryo kümesi için kolaylık sağlamak amacıyla tasarlanmıştır. Etkinlik işlevlerini kullanarak bu özelliklerin tümünü kendiniz uygulayabilirsiniz. Çoğu durumda etkinlik işlevleri size daha fazla esneklik verebilir.
HTTP 202 işlenmesi (yalnızca .NET)
"HTTP çağrısı" API'si, yoklama tüketici deseninin istemci tarafını otomatik olarak uygulayabilir. Çağrılan API, konum üst bilgisi ile birlikte bir HTTP 202 yanıtı döndürürse, orkestratör işlevi, 202 dışındaki bir yanıt alıncaya kadar konum kaynağını otomatik olarak sorgular. Bu yanıt, orchestrator işlev koduna döndürülen yanıt olacaktır.
[FunctionName(nameof(CheckSiteAvailabilityWithPolling))]
public static async Task CheckSiteAvailabilityWithPolling(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
Uri url = context.GetInput<Uri>();
// HTTP automatic polling on 202 response is enabled by default in .NET in-process.
DurableHttpResponse response =
await context.CallHttpAsync(HttpMethod.Get, url);
}
Uyarı
- Orchestrator işlevleri, Zaman uyumsuz işlem izleme bölümünde açıklandığı gibi sunucu tarafı yoklama tüketici desenini de yerel olarak destekler. Bu destek, bir işlev uygulamasındaki düzenlemelerin diğer işlev uygulamalarında orchestrator işlevlerini kolayca koordine olabileceği anlamına gelir. Bu, alt düzenleme kavramına benzer, ancak uygulamalar arası iletişimi destekler. Bu destek özellikle mikro hizmet stili uygulama geliştirme için kullanışlıdır.
- Yerleşik HTTP yoklama düzeni şu anda yalnızca .NET ana bilgisayarında kullanılabilir.
- .NET işlem içi modelinde anket düzeni varsayılan olarak etkinleştirilirken, .NET Isolated modelinde varsayılan olarak devre dışı bırakılır. .NET Isolated'de etkinleştirmek istiyorsanız, örnek koda bakın ve asynchronousPatternEnabled argümanını true olarak ayarlayın.
- HTTP otomatik sorgulama deseni, Durable Functions .NET Isolated v1.5.0 veya daha sonraki sürümlerde desteklenmektedir.
Yönetilen kimlikler
Durable Functions, yetkilendirme için Microsoft Entra belirteçleri kabul eden API'lere çağrıları yerel olarak destekler. Bu destek, bu belirteçleri almak için Azure yönetilen kimlikleri kullanır.
Aşağıdaki kod bir orchestrator işlevi örneğidir. İşlev, Azure Resource Manager virtual makineleri REST API kullanarak sanal makineyi yeniden başlatmak için kimliği doğrulanmış çağrılar yapar.
[FunctionName("RestartVm")]
public static async Task RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
string subscriptionId = "mySubId";
string resourceGroup = "myRG";
string vmName = "myVM";
string apiVersion = "2019-03-01";
// Automatically fetches an Azure AD token for resource = https://management.core.windows.net/.default
// and attaches it to the outgoing Azure Resource Manager API call.
var restartRequest = new DurableHttpRequest(
HttpMethod.Post,
new Uri($"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart?api-version={apiVersion}"),
tokenSource: new ManagedIdentityTokenSource("https://management.core.windows.net/.default"));
DurableHttpResponse restartResponse = await context.CallHttpAsync(restartRequest);
if (restartResponse.StatusCode != HttpStatusCode.OK)
{
throw new ArgumentException($"Failed to restart VM: {restartResponse.StatusCode}: {restartResponse.Content}");
}
}
Önceki örnekte tokenSource parametresi Azure Resource Manager için Microsoft Entra belirteçleri almak üzere yapılandırılmıştır. Belirteçler kaynak URI'sine https://management.core.windows.net/.defaultgöre tanımlanır. Örnekte, geçerli işlev uygulamasının yerel olarak çalıştığı veya yönetilen kimliğe sahip bir işlev uygulaması olarak dağıtıldığı varsayılır. Yerel kimliğin veya yönetilen kimliğin, belirtilen kaynak grubundaki myRGVM'leri yönetme iznine sahip olduğu varsayılır.
Çalışma zamanında, yapılandırılan belirteç kaynağı otomatik olarak bir OAuth 2.0 erişim belirteci döndürür. Ardından kaynak, giden isteğin Yetkilendirme üst bilgisine taşıyıcı belirteç olarak belirteci ekler. Bu model, aşağıdaki nedenlerle HTTP isteklerine el ile yetkilendirme üst bilgileri eklemeye göre bir geliştirmedir:
- Belirteç yenilemesi otomatik olarak işlenir. Süresi dolan belirteçler konusunda endişelenmeniz gerekmez.
- Belirteçler hiçbir zaman kalıcı orkestrasyon durumunda depolanmaz.
- Belirteç alımını yönetmek için herhangi bir kod yazmanız gerekmez.
precompiled C# RestartVMs örneğinde daha eksiksiz bir örnek bulabilirsiniz.
Yönetilen kimlikler Azure kaynak yönetimiyle sınırlı değildir. Yönetilen kimlikleri, Microsoft'tan Azure hizmetleri ve iş ortaklarının web uygulamaları da dahil olmak üzere Microsoft Entra taşıyıcı belirteçlerini kabul eden herhangi bir API'ye erişmek için kullanabilirsiniz. İş ortağının web uygulaması başka bir işlev uygulaması bile olabilir. Microsoft'un Microsoft Entra ID kimlik doğrulamasını destekleyen Azure hizmetlerinin listesi için bkz. Microsoft Entra kimlik doğrulamasını destekleyen Azure hizmetleri.
Sınırlamalar
HTTP API'lerini çağırmaya yönelik yerleşik destek kolaylık bir özelliktir. Tüm senaryolar için uygun değildir.
Orchestrator işlevleri tarafından gönderilen HTTP istekleri ve yanıtları, Durable Functions depolama sağlayıcısında ileti olarak serialleştirilmiş ve kalıcı hale getirilmiş şeklindedir. Bu kalıcı kuyruğa alma davranışı, HTTP çağrılarının düzenleme yeniden yürütmesi için güvenilir ve güvenli olmasını sağlar. Ancak, kalıcı kuyruğa alma davranışının da sınırlamaları vardır:
- Her HTTP isteği, yerel bir HTTP istemcisiyle karşılaştırıldığında ek gecikme süresi içerir.
- Yapılandırılan depolama sağlayıcısına bağlı olarak, büyük istek veya yanıt iletileri düzenleme performansını önemli ölçüde düşürebilir. Örneğin, Azure Storage kullanırken, Azure Kuyruk iletilerine sığamayacak kadar büyük HTTP yükleri sıkıştırılır ve Azure Blob depolamada depolanır.
- Akış, parçalanmış ve ikili yükler desteklenmezler.
- HTTP istemcisinin davranışını özelleştirme özelliği sınırlıdır.
Bu sınırlamalardan herhangi biri kullanım örneğinizi etkileyebilirse, bunun yerine giden HTTP çağrıları yapmak için etkinlik işlevlerini ve dile özgü HTTP istemci kitaplıklarını kullanmayı göz önünde bulundurun.
Genişletilebilirlik (yalnızca işlem içi .NET)
İşlem içi çalışan için Azure Functions .NET bağımlılık ekleme kullanarak düzenlemenin iç HTTP istemcisinin davranışını özelleştirmek mümkündür. Bu özellik, küçük davranış değişiklikleri yapmak için yararlı olabilir. Sahte nesneler ekleyerek HTTP istemcisini birim testi için de yararlı olabilir.
Aşağıdaki örnekte, dış HTTP uç noktalarını çağıran düzenleyici işlevleri için TLS/SSL sertifika doğrulamasını devre dışı bırakmak için bağımlılık eklemenin kullanılması gösterilmektedir.
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
// Register own factory
builder.Services.AddSingleton<
IDurableHttpMessageHandlerFactory,
MyDurableHttpMessageHandlerFactory>();
}
}
public class MyDurableHttpMessageHandlerFactory : IDurableHttpMessageHandlerFactory
{
public HttpMessageHandler CreateHttpMessageHandler()
{
// Disable TLS/SSL certificate validation (not recommended in production!)
return new HttpClientHandler
{
ServerCertificateCustomValidationCallback =
HttpClientHandler.DangerousAcceptAnyServerCertificateValidator,
};
}
}