طور باستخدام مجموعة تطوير المهام الدائمة ل Go

باستخدام مجموعة تطوير المهام الدائمة ل Go، يمكنك تعريف التنسيقات والأنشطة والكيانات الدائمة كوظائف Go. استضاف التطبيق على منصة الحوسبة الخاصة بك. يقوم جدولة المهام الدائمة بتخزين سجل التنفيذ ويرسل الأعمال إلى عمال Go الخاص بك.

مهم

حزمة تطوير اللعبة Go في مرحلة البيتا. تستخدم هذه المقالة ونظام Go السريعالإصدار 1.0.0-beta3. النسخة التجريبية ليست بديلا مباشرا ل v0.6.0: فهي لا تدعم الخلفيات المدمجة ل SQLite وPostgreSQL أو مضيف gRPC المستقل. Go ليست لغة Durable Functions.

المتطلبات المسبقة والتركيب

قم بتثبيت النسخة التجريبية التي صدرت من وحدة Go موجودة:

go get github.com/microsoft/durabletask-go@v1.0.0-beta3

بعد إضافة استيراد SDK إلى كودك، قم بتشغيل go mod tidy لتسجيل التبعيات الانتقالية وعمليات التحقق من المجموع.

للحصول على تطبيق كامل يبدأ الموظف، ويجدولة الأنشطة المتوازية، ويقرأ نتائجها، ثم يغلق، راجع إنشاء تطبيق ب SDKs لمهام دائمة - Go.

نموذج البرمجة

حزمة تطوير البرمجيات تشحن كوحدة غو واحدة. باقاتها الرئيسية هي:

الحزمة الغرض
task التنسيق، النشاط، وسياق الكيانات؛ تسجيل المهام؛ أساسيات سير العمل الدائمة.
durabletaskscheduler خيارات الاتصال، واتصالات منفصلة بين العميل والعامل إلى جدولة المهام الدائمة.
client تكوين العامل، بما في ذلك التزامن، وإصدار الإصدارات، ومرشحات عناصر العمل.
api معرفات المثيلات والكيانات، بيانات وصفية التنسيق، وخيارات طلبات الإدارة.

الموزع لديه التوقيع func(*task.OrchestrationContext) (any, error). النشاط له التوقيع func(task.ActivityContext) (any, error). الكيان القائم على الدالة له التوقيع func(*task.EntityContext) (any, error). اقرأ الإدخال المكتوب باستخدام GetInput، وترد نتيجة قابلة للتسلسل أو خطأ. JSON هو تنسيق البيانات الافتراضي.

تسجيل وتنفيذ المهام

أنشئ سجل باستخدام task.NewTaskRegistry. سجل الأسماء المستقرة باستخدام AddOrchestratorN، AddActivityN، و AddEntityN، وتحقق من أخطاء التسجيل. يجب أن تتطابق الأسماء المستخدمة في استدعاءات النشاط وجدولة العملاء مع التسجيلات.

قم بتحليل سلسلة الاتصال باستخدام durabletaskscheduler.NewOptionsFromConnectionString. مرر الخيارات إلى:

  • durabletaskscheduler.NewClient لبدء وإدارة حالات التوزيع الأوركسترالي.
  • durabletaskscheduler.NewWorker لتنفيذ المهام المسجلة.

اطلب Start من العامل البدء في معالجة بنود العمل. استخدم client.WithAutoWorkItemFilters() ذلك لاشتقاق مرشحات توجيه العمال من السجل. لا تدع العامل يستهلك مهام مسجلة فقط من قبل تطبيق آخر.

العميل والعامل يمتلكان علاقات منفصلة. أغلق العميل عند الانتهاء. استنزاف العامل باستخدام Shutdown، باستخدام سياق جديد ومحدود إذا انتهت صلاحية سياق تشغيل التطبيق. يقوم البدء السريع بفحص الأخطاء من كلا العمليتين.

اكتب التنسيقات الحتمية

استخدم سياق التنسيق للعمليات الدائمة:

العملية جو API معرفة المزيد
أنشطة التسلسل ctx.CallActivity(...).Await(&result) تسلسل الدوال
انتشروا وشاركوا في الحضور جدولة جميع المهام، ثم ctx.WhenAll(tasks...) اقرأ النتائج مع Await خروج الهجوم/المروحة
تأخير ctx.CreateTimer(duration).Await(nil) المؤقتات المتانة
انتظر حدثا ctx.WaitForSingleEvent(name, timeout).Await(&result) الأحداث الخارجية
استدعاء سير عمل فرعي ctx.CallSubOrchestrator(...).Await(&result) التوزيع الفرعي
إعادة محاولة نشاط task.WithActivityRetryPolicy التعامل مع الأخطاء وإعادة المحاولات
ابدأ تاريخا جديدا ctx.ContinueAsNew التوزيع الأبدي
تقرير التقدم ctx.SetCustomStatusValue الحالة المخصصة
الاتصال أو الإشارة إلى كيان ctx.CallEntity وctx.SignalEntity الكيانات الدائمة

لا تقوم بإجراء استدعاءات الشبكة، أو إدخال/إخراج الملفات، أو قراءات متغيرات البيئة، أو أي عمل غير حتمي آخر في آلة التنسيق. ابذل هذا الجهد في الأنشطة. استخدم أساسيات التزامن المتطورة في مجموعة تطوير البرمجيات بدلا من الروتينات الأصلية أو القنوات sync.WaitGroupأو time.Sleep في كود الأوركستراتور. استخدامه ctx.Logger() لتسجيل البيانات الواعية بإعادة اللعب. للتفاصيل، راجع قيود كود الأوركستراتور.

يمكن للأنشطة تنفيذ عمليات إدخال/إخراج Go العادية، لكنها يمكن تنفيذها أكثر من مرة. اجعل الآثار الجانبية الخارجية غير فعالة.

اقرأ نتائج الإكمال

WaitForOrchestrationCompletion العودة بدون خطأ تعني أن النسخة وصلت إلى حالة طرفية، وليس بالضرورة أن سير العمل قد نجح. اطلب الحمولات باستخدام api.WithFetchPayloads(true)، تحقق من ذلك RuntimeStatus ، api.RUNTIME_STATUS_COMPLETEDثم فك تشفير المخرجات باستخدام ReadOutput.

في الحالات الفاشلة، افحص FailureDetails. لا تبلغ عن فشل أو إنهاء التوزيع كنتيجة ناجحة. انظر إدارة المشاكل.

Connect to the emulator أو Azure

البدء السريع يستخدم سلسلة الاتصال Endpoint=http://localhost:8080;TaskHub=default;Authentication=None. استخدامه Authentication=None لتطوير المحاكي المحلي، وليس للوصول المصادق إلى Azure.

بالنسبة ل Azure، استخدم نقطة نهاية HTTPS الخاصة بالمجدول واسم مركز المهام. اختر Authentication=DefaultAzure سلسلة بيانات اعتماد Azure Identity، أو Authentication=AzureCLI لهوية تطوير مسجلة الدخول عبر Azure CLI. يدعم جو SDK أيضا الهوية المدارة وهوية عبء العمل. للحصول على تفاصيل التكوين وأنماط المصادقة المدعومة، راجع دليل اتصال Go SDK.

يقرأ البدء السريع سلسلة سلسلة الاتصال من DTS_CONNECTION_STRING المتغير البيئي ويمررها إلى NewOptionsFromConnectionString. حزمة تطوير البرمجيات لا تقرأ هذا المتغير تلقائيا.

Samples

يتضمن مستودع غو SDK عينات قابلة للتشغيل لمجالات ميزاته، بما في ذلك تسلسلات الأنشطة، وخروج المروحة/المروحة الداخلية، والأحداث الخارجية، وإعادة الاستخدام، والكيانات الدائمة، والجداول، والحمولات الكبيرة، وتصدير التاريخ، والتتبع الموزع. للاطلاع على القائمة الكاملة والمتطلبات المسبقة وتعليمات التشغيل، راجع عينات SDK الخاصة ب Go.

التوزيع الموسيقي التجريبي

لا تتضمن مجموعة تطوير البرمجيات (SDK) خلفية للتخزين، لذا تعمل التنسيقات فقط ضد Durable Task Scheduler أو محاكي البرنامج. اختبر الأنشطة ومنطق الأعمال الأخرى باستخدام اختبارات وحدات Go العادية. للتحقق من سلوك التنسيق، بما في ذلك إعادة التشغيل، قم بإجراء اختبارات تكامل ضد المحاكي أو مركز مهام مخصص.

اعتبارات التوافق التجريبي

  • الجداول: جداول Go لا تشارك صيغة حالتها المستمرة مع SDKs الأخرى. استخدم مركز مهام Go-only للمهام المجدولة.
  • أقفال الكيانات: Go و Python يستخدمان ترتيب قفل متعدد الكيانات مختلفا عن .NET. لا تحصل على مجموعات أقفال متداخلة في نفس الوقت عبر تنسيقات Go/Python و.NET.
  • إرجاع: يرفض عامل Go بشكل محافظ التاريخ الذي يحتوي على أحداث إضافية غير دورة حياة بعد فشل نشاط أو عملية فرعية. طلب إعادة الرجوع المقبول لا يثبت الاسترداد؛ تحقق من معرف تنفيذ جديد ومخرجات ناجحة.
  • واجهات برمجة تطبيقات إدارة المحاكي: قائمة العينات والتنقية المصفاة لها قيود موثقة في المحاكي. أفضل تنظيف النسخة بنطاق النسخة كمثال، ولا تمسح مركز مشترك.
  • تصدير التاريخ (معاينة): استخدم مركز مهام معزول ووجه تصدير فقط بحيث لا يمكن لتصدير وظائف التصدير أو حذف بيانات التطبيقات غير المرتبطة.

راجع مصفوفة ميزات ودليل النقل الخاص ب Go SDK للتوافق التفصيلي وسلوك دورة الحياة.