RunToCompletion

Sürüm 7.1'den başlayarak Service Fabric, kapsayıcılar ve konuk yürütülebilir uygulamalar için RunToCompletion semantiğini destekler. Bu semantikler, her zaman çalışan uygulama ve hizmetlerin aksine, bir görevi tamamlayan ve çıkan uygulamaları ve hizmetleri etkinleştirir.

Bu makaleye devam etmeden önce Service Fabric uygulama modeli ve Service Fabric barındırma modeli hakkında bilgi sahibi olun.

Not

RunToCompletion semantiği Reliable Services programlama modelini kullanan hizmetler için desteklenmez.

RunToCompletion semantiği ve belirtimi

ServiceManifest'i içeri aktarırken RunToCompletion semantiğini olarak ExecutionPolicy belirtebilirsiniz. ServiceManifest'i oluşturan tüm CodePackage'lar belirtilen ilkeyi devralır. ApplicationManifest.xml aşağıdaki kod parçacığı bir örnek sağlar:

<ServiceManifestImport>
  <ServiceManifestRef ServiceManifestName="RunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
  <Policies>
    <ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
  </Policies>
</ServiceManifestImport>

ExecutionPolicy iki özniteliğe izin verir:

  • TypeRunToCompletion izin verilen tek değerdir.

  • Restart hata durumunda ServicePackage'daki CodePackage'lara uygulanacak yeniden başlatma ilkesini belirtir. Sıfır olmayan bir çıkış koduyla çıkan codePackage'ın başarısız olduğu kabul edilir. Bu öznitelik OnFailure için izin verilen değerler varsayılan olarak ve Neverdeğerleridir OnFailure .

    • Yeniden başlatma ilkesi olarak OnFailureayarlandığında, sıfır olmayan çıkış koduyla başarısız olan tüm CodePackage yeniden başlatılır ve yinelenen hatalar arasında geri almalar olur.

    • Yeniden başlatma ilkesi olarak Neverayarlandığında CodePackage başarısız olursa DeployedServicePackage dağıtım durumu Başarısız olarak işaretlenir, ancak diğer CodePackage'lar yürütülmeye devam eder.

ServicePackage'daki tüm CodePackage'lar çıkış koduyla 0başarıyla tamamlanırsa, DeployedServicePackage dağıtım durumu RanToCompletion olarak işaretlenir.

RunToCompletion semantiği kullanan kod örneği

Şimdi RunToCompletion semantiğini kullanan tam bir örneğe bakalım.

Önemli

Aşağıdaki örnekte, Service Fabric ve Docker kullanarak Windows kapsayıcı uygulamaları oluşturma konusunda bilgi sahibi olduğunuz varsayılır.

Windows Server kapsayıcıları, konak işletim sisteminin tüm sürümlerinde uyumlu değildir. Bu örnek başvurur mcr.microsoft.com/windows/nanoserver:1809. Daha fazla bilgi için bkz . Windows kapsayıcı sürümü uyumluluğu.

Aşağıdaki ServiceManifest.xml , kapsayıcıları temsil eden iki CodePackage'ı içeren bir ServicePackage açıklanmaktadır. RunToCompletionCodePackage1yalnızca stdout'a bir ileti kaydeder ve çıkar. RunToCompletionCodePackage2geri döngü adresine bir süre ping'ler ve ardından , 1veya 2çıkış koduyla 0çıkar.

<?xml version="1.0" encoding="UTF-8"?>
<ServiceManifest Name="WindowsRunToCompletionServicePackage" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>Windows RunToCompletion Service</Description>
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="WindowsRunToCompletionServiceType"  UseImplicitHost="true"/>
  </ServiceTypes>
  <CodePackage Name="RunToCompletionCodePackage1" Version="1.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/c,echo Hi from RunToCompletionCodePackage1 &amp;&amp; exit 0</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>

  <CodePackage Name="RunToCompletionCodePackage2" Version="1.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/v,/c,ping 127.0.0.1 &amp;&amp; set /a exitCode=%random% % 3 &amp;&amp; exit !exitCode!</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>
</ServiceManifest>

Aşağıdaki ApplicationManifest.xml, yukarıda açıklanan ServiceManifest.xml temel alan bir uygulama açıklanmaktadır. Kod, yeniden başlatma ilkesiyle için WindowsRunToCompletionServicePackage RunToCompletion ExecutionPolicy'yi OnFailurebelirtir.

Etkinleştirmeden sonra WindowsRunToCompletionServicePackage , bağlı CodePackage'ları başlatılır. RunToCompletionCodePackage1 ilk etkinleştirmede başarıyla çıkılmalıdır. RunToCompletionCodePackage2 sıfır olmayan bir çıkış koduyla başarısız olabilir ve yeniden başlatma ilkesi olduğundan OnFailureyeniden başlatılır.

<?xml version="1.0" encoding="UTF-8"?>
<ApplicationManifest ApplicationTypeName="WindowsRunToCompletionApplicationType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Description>Windows RunToCompletion Application</Description>

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="WindowsRunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
    <Policies>
      <ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
    </Policies>
  </ServiceManifestImport>

  <DefaultServices>
    <Service Name="WindowsRunToCompletionService" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="WindowsRunToCompletionServiceType" InstanceCount="1">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

DeployedServicePackage'ın dağıtım durumunu sorgulama

DeployedServicePackage dağıtım durumunu sorgulayabilirsiniz.

RunToCompletion semantiği için dikkat edilmesi gerekenler

RunToCompletion desteği hakkında aşağıdaki noktaları göz önünde bulundurun:

  • RunToCompletion semantiği yalnızca kapsayıcılar ve konuk yürütülebilir uygulamalar için desteklenir.
  • RunToCompletion semantiğine sahip uygulamalar için yükseltme senaryolarına izin verilmez. Gerekirse bu tür uygulamaları silmeniz ve yeniden oluşturmanız gerekir.
  • Yük devretme olayları, başarıyla tamamlandıktan sonra, aynı düğümde veya kümenin diğer düğümlerinde CodePackage'ların yeniden yürütülmesine neden olabilir. Yük devretme olaylarına örnek olarak düğüm yeniden başlatmaları ve bir düğümdeki Service Fabric çalışma zamanı yükseltmeleri verilebilir.
  • RunToCompletion ile ServicePackageActivationMode="SharedProcess"uyumsuz. Service Fabric çalışma zamanı sürüm 9.0 ve üzeri, bu tür hizmetler için doğrulamada başarısız oluyor. SharedProcess varsayılan değerdir, bu nedenle RunToCompletion semantiğini kullanmayı belirtmeniz ServicePackageActivationMode="ExclusiveProcess" gerekir.

Sonraki adımlar