Ana içeriğe geç

External HTTP Task (Type: 22) New v0.0.88

External HTTP Task, HTTP Task (type 6) ile birebir aynı konfigürasyon ve script yüzeyine sahip bir HTTP çağrısı task'ıdır. Tek fark çalıştığı yerdir: type 6 çağrıyı Execution servisine /execution/invoke/{type}/{key} hop'u ile devrederken, type 22 çağrıyı doğrudan Orchestrator process'i içinde yürütür.

İki tip de aynı paylaşılan gönderim çekirdeğinden (HttpTaskInvocation) geçer; adlandırılmış HTTP client seçimi (validateSsl: false → SSL-bypass client), header/Content-Type semantiği, response parse ve acceptedStatusCodes eşleştirmesi aynı koddan çalıştığı için iki tip arasında davranış farkı yoktur — yalnızca hop farkı vardır.

Görev Tanımı

Schema: task-definition.schema.json

{
"key": "get-user-info-external",
"version": "1.0.0",
"domain": "core",
"flow": "sys-tasks",
"flowVersion": "1.0.0",
"tags": ["users", "lookup", "external-http"],
"attributes": {
"type": "22",
"config": {
"url": "http://api.example.com/api/users/{userId}",
"method": "GET",
"headers": {
"Content-Type": "application/json"
},
"timeoutSeconds": 30,
"validateSsl": true
}
}
}

Konfigürasyon Alanları

ExternalHttpTask, HttpTask'tan türer — konfigürasyon alanları birebir aynıdır:

AlanTipZorunluVarsayılanAçıklama
urlstringEvet-Hedef URL
methodstringEvet-HTTP metodu (GET, POST, PUT, DELETE, PATCH)
headersobjectHayırnullHTTP header'ları
bodyobjectHayırnullRequest body (GET dışında)
contentTypestringHayır-Request body için Content-Type header'ı (örn. application/json, application/xml, text/plain). Tanımlandığında body byte-exact korunur
rawBodystringHayırnullBody'yi hiçbir JSON yeniden serileştirmesi yapmadan byte-exact gönderir (body'yi bypass eder ve body'ye önceliklidir). İmzalanan (JWS/mTLS) gövdeler için: gönderilen bytelar imzalanan bytelarla birebir aynı olmalıdır
timeoutSecondsintegerHayır30İstek timeout süresi (saniye, minimum: 1) — bu task için tek sınır budur, aşağıya bakın
validateSslbooleanHayırtrueSSL sertifika doğrulaması
acceptedStatusCodesstring[]Hayır-Başarılı kabul edilecek HTTP hata kodları. Exact kod ("403", "404") ve wildcard pattern ("4xx", "40x", "5xx") destekler

Property erişimi ve setter metodları (SetUrl, SetHeaders, AddHeader, RemoveHeader, SetBody, ...) HTTP Task ile aynıdır — mapping script'leri task as HttpTask cast'i ile değişmeden çalışır, çünkü ExternalHttpTask sınıfı HttpTask'ı extend eder.

Standart Yanıt

Çıktı şekli type 6 ile birebir aynıdır — bkz. HTTP Task → Standart Yanıt ve Hata Senaryoları.

HttpTask (Type 6) ile fark

HTTP Task (6)External HTTP Task (22)
Çalıştığı yerExecution servisiOrchestrator process'i (in-process)
Ağ hop'u/execution/invoke/{type}/{key}Yok
Dapr sidecar circuit breakerDevredeDevrede değil
ExecutionApi:InvocationTimeoutSeconds katmanıDevredeDevrede değil — tek sınır task'ın kendi timeoutSeconds'ı (varsayılan 30) ve job bütçesidir
Mapping script yüzeyitask as HttpTaskAynı (task as HttpTask)
Çıktı şekliStandart HTTP task çıktısıType 6 ile birebir aynı
Reserved trace header'larıTask binding'den ezilemezAynı kural geçerli (aşağıya bakın)

Reserved trace header'ları

traceparent, tracestate, baggage, x-request-id, X-Correlation-Id ve X-Workflow-Instance-Id task binding'inin headers alanında tanımlanamaz — invoker bu anahtarları görmezden gelir (InvokerHelpers.IsReservedTraceHeader). Güncel değerler otomatik enjekte edilir: traceparent/tracestate .NET HttpClient instrumentasyonu ile, workflow-context çifti ise InvokerHelpers.ApplyTrustedCorrelationHeaders ile Activity baggage'dan. External HTTP task, orchestrator'ın kendi task span'leri ActivityContext'ten oluşturulduğu (in-process Activity-baggage zincirini kesen) bir konumda çalıştığı için pipeline'ın oluşturduğu TaskTraceContext'i açıkça taşır — type 6'nın invoke zarfında context taşımasıyla aynı gerekçe.

622 mi?

Seçim kriteri6 (HTTP, Execution'da)22 (External HTTP, Orchestrator'da)
Hedef güvenilmez veya yüksek hacimli mi?Tercih edin — Execution servisi arbitrary egress'i izole etmek için vardırKullanmayın
Execution servisinin kullanılabilirliğine bağımlı olmamalı mı?Hayır (bağımlı)Tercih edin — çağrı Execution'ın ayakta olmasına bağlı değildir
Ekstra ağ hop'u/gecikmesi kabul edilemez mi?HayırTercih edin — düşük gecikme
Dapr sidecar circuit breaker / remote-invocation timeout korumasına ihtiyaç var mı?Tercih edinHayır — bu katmanlar devrede değil
Çağrı, veritabanını da barındıran host içinde mi çalışmalı?Hayır (izole)Dikkat — Orchestrator veritabanını da barındıran host'tur
Şema paketi type 22'yi henüz taşımıyor

@burgan-tech/vnext-schema@0.0.53 paketindeki task-definition.schema.json, attributes.type enum'ında 22 değerini içermiyor. Bu nedenle domain paketlerinde npm run validate bir External HTTP task tanımını reddeder; runtime tarafında publish ve çalıştırma sorunsuz çalışır.

bilgi

Kaynak dokümanda (vnext/docs/runtime/task-executors-and-invokers.md) External HTTP task'ın gecikme/izolasyon trade-off'larını anlatan bölümde task tipi yer yer "21" olarak yazılmıştır — bu bir typo'dur; TaskEnums.cs ve JSON discriminator'ı 22'dir, bu sayfa doğru değeri kullanır.

Örnek Component

vnext-example reposu içinde External HTTP task'a özel bir örnek henüz eklenmedi — HTTP Task (type 6) örnekleri (core/Tasks/ altında) config yüzeyi bakımından birebir uygulanabilir; örnek eklenecek.

İlgili