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.
Go için Durable Task SDK'yı kullanarak, orkestrasyonları, faaliyetleri ve dayanıklı varlıkları Go fonksiyonları olarak tanımlayabilirsiniz. Uygulamayı kendi hesaplama platformunuzda barındırın. Durable Task Scheduler, yürütme geçmişini saklar ve işi Go çalışanlarınıza gönderir.
Important
Go SDK beta aşamasında. Bu makale ve Go hızlı başlangıç de v1.0.0-beta3 kullanıyor. Beta, v0.6.0'ın doğrudan yerine geçecek bir sürüm değil: gömülü SQLite ve PostgreSQL backend'lerini ya da bağımsız gRPC sunucusunu desteklemiyor. Go bir Dayanıklı İşlevler dili değil.
Önkoşullar ve yükleme
- 1.25 veya üzeri.
- Docker veya Durable Task Scheduler emülatörü için uyumlu bir konteyner çalışma zamanı.
- Azure için, mevcut bir zamanlayıcı ve görev merkezi ile Durable Task Data Contributor rolüne sahip bir kimlik. Bkz. Kimlik tabanlı erişim.
Mevcut bir Go modülünden yayınlanan beta'yı yükleyin:
go get github.com/microsoft/durabletask-go@v1.0.0-beta3
SDK içe aktarmaları kodunuza ekledikten sonra, geçişli bağımlılıkları ve kontrol toplamlarını kaydetmek için çalıştırın go mod tidy .
Bir çalışanı başlatan, paralel etkinlikleri planlayan, sonuçlarını okuyup kapatan tam bir uygulama için bkz. Kalıcı Görev SDK'ları ile bir uygulama oluşturma - Go.
Programlama modeli
SDK tek bir Go modülü olarak gönderiliyor. Ana paketleri şunlardır:
| Paket | Purpose |
|---|---|
task |
Orkestrasyon, etkinlik ve varlık bağlamları; görev kaydı; dayanıklı iş akışı temel öğeleri. |
durabletaskscheduler |
Bağlantı seçenekleri ve Durable Task Scheduler'a ayrı istemci ile işleyici bağlantıları. |
client |
Worker yapılandırması, eşzamanlılık, sürüm oluşturma ve iş öğesi filtreleri dahil. |
api |
Örnek ve varlık kimlikleri, orkestrasyon meta verileri ve yönetim isteği seçenekleri. |
Bir orkestratörün imzası func(*task.OrchestrationContext) (any, error)vardır. Etkinliğin imzası func(task.ActivityContext) (any, error). Fonksiyon tabanlı bir varlık imzasına func(*task.EntityContext) (any, error)sahiptir. Yazılan girdiyi , GetInputile okuyun ve serileştirilebilir bir sonuç veya hata döndürün. JSON varsayılan veri formatıdır.
Görevleri kaydet ve yürüt
Bir kayıt defteri oluşturun.task.NewTaskRegistry Sabit adları AddOrchestratorN, AddActivityN ve AddEntityN ile kaydedin ve kayıt hatalarını kontrol edin. Etkinlik çağrılarında ve istemci planlamasında kullanılan isimler kayıtlarla eşleşmelidir.
Bağlantı dizesini durabletaskscheduler.NewOptionsFromConnectionString ile ayrıştırın. Seçenekleri şuraya iletin:
- Orkestrasyon örneklerini başlatmak ve yönetmek için
durabletaskscheduler.NewClientöğesini seçin. -
durabletaskscheduler.NewWorkerKayıtlı görevleri yürütün.
İş öğelerini işlemeye başlamak için çalışan üzerinde Start çağrısını yapın. Kayıttan çalışan yönlendirme filtreleri türetmek için kullanılır client.WithAutoWorkItemFilters() . Bir worker'ın yalnızca başka bir uygulama tarafından kaydedilen görevleri işlemesine izin vermeyin.
Müşteri ve çalışan ayrı bağlantılara sahiptir. İşi bitince istemciyi kapatın. Uygulamanın çalıştırma bağlamının süresi dolmuşsa, işçiyi yeni ve sınırlı bir bağlam kullanarak Shutdown ile tahliye edin. Hızlı başlangıç her iki işlemdeki hataları kontrol ediyor.
Deterministik orkestratörler yazın
Dayanıklı işlemler için orkestrasyon bağlamını kullanın:
| Operation | Go API | Learn more |
|---|---|---|
| Sıralama etkinlikleri | ctx.CallActivity(...).Await(&result) |
İşlev zincirleme |
| Yayılma ve toplanma | Tüm görevleri zamanlayın, ardından ctx.WhenAll(tasks...) ve sonuçları Await ile okuyun |
Fan-out/fan-in |
| Delay | ctx.CreateTimer(duration).Await(nil) |
Dayanıklı zamanlayıcılar |
| Bir olay bekleyin | ctx.WaitForSingleEvent(name, timeout).Await(&result) |
Dış olaylar |
| Bir alt iş akışı çağırın | ctx.CallSubOrchestrator(...).Await(&result) |
Alt-orkestrasyonlar |
| Etkinliği yeniden deneme | task.WithActivityRetryPolicy |
Hata yönetimi ve tekrar denemeler |
| Yeni bir geçmiş başlatın | ctx.ContinueAsNew |
Ebedi düzenleme |
| Rapor ilerlemesi | ctx.SetCustomStatusValue |
Özel durum |
| Bir varlığı çağırmak veya bir varlığa sinyal göndermek |
ctx.CallEntity ve ctx.SignalEntity |
Dayanıklı varlıklar |
Orkestratörde ağ çağrıları, dosya G/Ç, ortam değişkeni okumaları veya diğer deterministik olmayan işlemler yapmayın. Bu işi aktivitelere koyun. Orkestratör kodunda yerel goroutineler, kanallar, sync.WaitGroup veya time.Sleep yerine SDK'nın dayanıklı eşzamanlılık primitiflerini kullanın. Replay-aware günlük kaydı için ctx.Logger() kullanın. Detaylar için Orchestrator kod kısıtlamaları bölümüne bakın.
Faaliyetler sıradan Go I/O yapabilir, ancak birden fazla kez yürütülebilir. Dış yan etkileri idempotent yapın.
Tamamlanma sonuçlarını okuyun
WaitForOrchestrationCompletion Hatasız dönmek, örneğin terminal durumuna ulaştığı anlamına gelir; iş akışının başarılı olduğu anlamına mutlaka gelmez. Yükleri api.WithFetchPayloads(true) ile isteyin, RuntimeStatus öğesinin api.RUNTIME_STATUS_COMPLETED olduğunu kontrol edin ve ardından çıktıyı ReadOutput ile çözün.
Başarısız durumlar için FailureDetails öğesini inceleyin. Başarısız veya sonlandırılmış bir orkestrasyonu başarılı bir sonuç olarak bildirmeyin.
Bkz. Instance yönetimi.
Emülatör veya Azure'a bağlanın
Hızlı başlatma ise bağlantı dizesi'i Endpoint=http://localhost:8080;TaskHub=default;Authentication=Nonekullanır. Yerel emülatör geliştirme için Authentication=None kullanın, kimliği doğrulanmış Azure erişimi için değil.
Azure için, zamanlayıcınızın HTTPS uç noktası ve görev merkezi adını kullanın. Azure Identity kimlik bilgisi zinciri için Authentication=AzureCLI veya Azure CLI üzerinden oturum açılmış bir geliştirme kimliği için Authentication=DefaultAzure seçin. Go SDK ayrıca yönetilen kimlik ve iş yükü kimliğini destekler. Yapılandırma detayları ve desteklenen kimlik doğrulama modları için Go SDK bağlantı rehberine bakınız.
Hızlı başlatma, bağlantı dizesi'i ortam DTS_CONNECTION_STRING değişkeninden okur ve onu NewOptionsFromConnectionString öğesine iletir. SDK bu değişkeni otomatik olarak okumaz.
Samples
Go SDK reposu, etkinlik dizileri, fan-out/fan-in, harici olaylar, yeniden denemeler, dayanıklı varlıklar, zamanlamalar, büyük yükler, geçmiş dışa aktarma ve dağıtık izleme gibi özellik alanları için çalıştırılabilir örnekler içerir. Tam liste, ön koşullar ve çalıştırma talimatları için Go SDK örneklerine bakınız.
Test düzenlemeleri
SDK'da bir depolama backend bulunmuyor, bu yüzden orkestrasyonlar yalnızca Durable Task Scheduler veya onun emülatörüne karşı çalışır. Sıradan Go birim testleriyle aktiviteleri ve diğer iş mantıklarını test edin. Replay dahil olmak üzere orkestrasyon davranışını doğrulamak için, emülatör veya özel bir task hub’a karşı entegrasyon testleri yapın.
Beta uyumluluk konuları
- Zamanlamalar: Go zamanlamaları, kalıcı durum formatlarını diğer SDK'larla paylaşmaz. Planlı görevler için sadece Go tabanlı bir görev merkezi kullanın.
- Varlık kilitleri: Go ve Python, .NET'ten farklı bir çoklu varlık kilit sıralaması kullanır. Go/Python ve .NET orkestrasyonları arasında aynı anda örtüşen kilit setleri edinmeyin.
- Geri sarma: Go worker, başarısız bir etkinlik veya alt işlem sonrası ek yaşam döngüsü dışı olaylarla geçmişleri muhafazakarca reddeder. Kabul edilen bir geri sarma talebi kurtarmayı kanıtlamaz; yeni bir çalıştırma kimliğini ve başarılı çıktıyı doğrulayın.
- Emülatör yönetim API'leri: İnstans listeleme ve filtrelenmiş temizleme işlemi için belgelenmiş emülatör sınırlamaları vardır. Örnekler için örnek düzeyi temizlemeyi tercih edin ve paylaşılan bir hub'ı temizlemeyin.
- Geçmişi dışa aktarma (önizleme): Dışa aktarma işlerinin alakasız uygulama verilerini dışa aktaramaması veya silememesi için izole, yalnızca Go için bir görev merkezi ve export hedefi kullanın.
Detaylı uyumluluk ve yaşam döngüsü davranışı için Go SDK özellik matrisi ve taşıma rehberine bakınız.