Task (Görev) Belgesi
Görevler (Tasks), iş akışı çalışma zamanında belirli işlemleri gerçekleştiren bağımsız ve yeniden kullanılabilir bileşenlerdir. Her görev kendi özel amacına göre farklı türlerde tanımlanabilir ve iş akışının farklı noktalarında çalıştırılabilir.
Görevler bağımsız bir iş akışı olarak saklanır. Kullanılacakları noktaya referans olarak tanımlanırlar.
Her bir etki alanı dağıtımında sys-tasks adında bir flow oluşur. Domain içerisinde kullanılan tüm görevler bu flow'da birer kayıt örneğidir.
Input ve output mapping'leri task tanımının parçası değildir. Mapping'ler, görevin kullanıldığı yapıda (transition, state entry/exit, function vb.) ayrıca belirtilir.
Task Tanım Şablonu
Her task tanımı task-definition.schema.json şemasına uyar. Zorunlu alanlar:
Schema:
task-definition.schema.json
{
"key": "task-key-name",
"version": "1.0.0",
"domain": "core",
"flow": "sys-tasks",
"flowVersion": "1.0.0",
"tags": ["tag1", "tag2"],
"attributes": {
"type": "6",
"config": {
// task türüne göre değişir
}
}
}
Üst Düzey Alanlar
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
key | string | Evet | Task tanımlayıcı anahtarı (^[a-z0-9-]+$ pattern) |
version | string | Evet | Versiyon (Major.Minor.Patch formatı) |
domain | string | Evet | Domain tanımlayıcısı |
flow | string | Evet | Her zaman sys-tasks |
flowVersion | string | Evet | Flow versiyonu |
tags | string[] | Evet | Task etiketleri (en az 1) |
attributes.type | string | Evet | Task türü numarası |
attributes.config | object | Evet | Task türüne göre konfigürasyon |
Görev Türleri
Runtime toplamda 23 task türü çalıştırır. @burgan-tech/vnext-schema@0.0.53 paketindeki task-definition.schema.json bunların ilk 21'ini tanımlar; type 22 (External HTTP) ve 23 (Python) için şema desteği bekleniyor (bkz. aşağıdaki not):
| # | Görev Türü | Açıklama | Detay |
|---|---|---|---|
| 1 | DaprHttpEndpoint | Dapr HTTP endpoint çağrısı | DaprHttpEndpoint |
| 2 | DaprBinding | Dapr binding (input/output) | DaprBinding |
| 3 | DaprService | Dapr service invocation çağrıları | DaprService |
| 4 | DaprPubSub | Dapr pub/sub mesajlaşma | DaprPubSub |
| 5 | HumanTask | İnsan müdahalesi gerektiren görev | (detay belgesi sonraki phase'de) |
| 6 | HttpTask | HTTP web servis çağrıları | HTTP |
| 7 | ScriptTask | C# Roslyn script çalıştırma | Script |
| 8 | ConditionTask | Koşullu mantık ve branch kararı | (detay belgesi sonraki phase'de) |
| 9 | TimerTask | Zamanlayıcı görevi | (detay belgesi sonraki phase'de) |
| 10 | NotificationTask | Bildirim gönderme | Notification |
| 11 | StartFlowTask | Yeni instance başlatma | Trigger |
| 12 | TriggerTransitionTask | Mevcut instance üzerinde transition tetikleme | Trigger |
| 13 | GetInstanceDataTask | Tek bir instance'ın verisini çekme | Trigger |
| 14 | SubProcessTask | SubProcess çalıştırma | Trigger |
| 15 | GetInstancesTask | Filtre ile birden fazla instance çekme | GetInstances |
| 16 | SoapTask | SOAP 1.1 / 1.2 web servis çağrısı | Soap |
| 17 | StateStoreTask | Dapr state store ile cache (get/set/delete) | StateStore |
| 18 | CacheAsideTask | Read-through cache (miss'te sourceTask çalıştırıp cache'ler) | CacheAside |
| 19 | GetInstanceTask | Tek bir instance'ın tam projeksiyonunu (metadata + data) çekme | GetInstance |
| 20 | DaprConversationTask | Dapr Conversation ile LLM/AI sağlayıcı çağrısı | DaprConversation |
| 21 | FanOutTask | Çalışma zamanında çözülen koleksiyonun her elemanı için iç task'ı paralel çalıştırma | Fan-Out |
| 22 | ExternalHttpTask New | HTTP çağrısını Execution'a gitmeden doğrudan Orchestrator içinde yürütme | External HTTP |
| 23 | PythonTask New | main(input) kontratlı, Execution'da çalışan built-in Python task (experimental) | Python |
22 ve 23 henüz şema paketinde yok@burgan-tech/vnext-schema@0.0.53 paketindeki task-definition.schema.json, attributes.type enum'ında 22 (External HTTP) ve 23 (Python) değerlerini henüz içermiyor. Bu nedenle domain paketlerinde npm run validate bu tiplerden birini kullanan bir task tanımını reddeder; runtime tarafında publish ve çalıştırma sorunsuzdur. Ayrıntı: External HTTP Task, Python Task.
Çoğu task türü Execution servisine bir ağ hop'u ile devredilir. İki istisna doğrudan Orchestrator process'i içinde çalışır: FanOutTask (type 21, iç task'ı paralel çalıştırır ama kendisi orchestrator-local'dir), ExternalHttpTask (type 22, HTTP çağrısını /execution/invoke/{type}/{key} hop'u olmadan in-process yapar); PythonTask (type 23) ise Execution servisinde python route'u üzerinden çalışır.
Görev Kullanımı
Görevler diğer modüller tarafından referans verilerek kullanılır. Her görev kullanımında order ve task referansı tanımlanır.
Örnek Görev Referansı
"onExecutionTasks": [
{
"order": 1,
"task": {
"key": "invalidate-cache",
"domain": "core",
"flow": "sys-tasks",
"version": "1.0.0"
}
}
]
Çalıştırma Sırası
orderdeğerleri kendi aralarında gruplanır- Aynı sırada olanlar paralel çalıştırılır
- Farklı sıradakiler sıralı çalıştırılır
Veri Yönetimi
- Task'ların çalışma sonucunda output data'sı varsa master data'yı patch version olarak yükseltir
Görev Çalıştırma Noktaları
İş akışı içinde:
Transition.OnExecutionTasks: Geçiş tetiklendiğinde çalışırState.OnEntries: Bir aşamaya ilk girişte çalışırState.OnExits: Bir aşamadan ilk çıkışta çalışır
İş akışı dışında:
Functions.OnExecutionTasks: Platform servisleri içinde çalışırExtensions.OnExecutionTasks: İş akışı kayıt örneği görevleri