Megosztás a következőn keresztül:


Futtatás befejezésig

A 7.1-es verziótól kezdődően a Service Fabric támogatja a RunToCompletion szemantikát tárolókhoz és vendég végrehajtható alkalmazásokhoz. Ezek a szemantikák lehetővé teszik a feladatokat és kilépést lehetővé tevő alkalmazásokat és szolgáltatásokat, szemben a mindig futó alkalmazásokkal és szolgáltatásokkal.

A cikk folytatása előtt ismerkedjen meg a Service Fabric alkalmazásmodellel és a Service Fabric üzemeltetési modelljével.

Megjegyzés

A RunToCompletion szemantika nem támogatott a Reliable Services programozási modellt használó szolgáltatások esetében.

RunToCompletion szemantika és specifikáció

A ServiceManifest importálásakor megadhatja a RunToCompletion szemantikátExecutionPolicy. A ServiceManifestet alkotó összes CodePackage örökli a megadott szabályzatot. A ApplicationManifest.xml következő kódrészlete egy példát mutat be:

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

ExecutionPolicy két attribútumot engedélyez:

  • Type az RunToCompletion egyetlen engedélyezett érték.

  • Restart A a ServicePackage hiba esetén a CodePackagesre alkalmazandó újraindítási szabályzatot határozza meg. A nem nulla kilépési kóddal kilépő CodePackage sikertelennek minősül. Ennek az attribútumnak az engedélyezett értékei a következők: OnFailure és Never, OnFailure alapértelmezett értékként.

    • Ha az újraindítási szabályzat értéke OnFailure, minden olyan CodePackage, amely nem nulla kilépési kóddal meghiúsul, újraindul, és az ismétlődő hibák között visszalépések lépnek fel.

    • Ha az újraindítási szabályzat értéke Never, ha valamelyik CodePackage sikertelen, az DeployedServicePackage üzembehelyezési állapota Sikertelen, de a többi CodePackages folytatja a végrehajtást.

Ha a ServicePackage összes CodePackage-fájlja a kilépési kóddal 0való sikeres befejezéshez fut, az DeployedServicePackage üzembehelyezési állapota RanToCompletion jelöléssel van ellátva.

Példa kódra a RunToCompletion szemantika használatával

Tekintsünk meg egy teljes példát, amely a RunToCompletion szemantikát használja.

Fontos

Az alábbi példa feltételezi, hogy ismeri a Windows-tárolóalkalmazások Service Fabric és Docker használatával történő létrehozását.

A Windows Server-tárolók nem kompatibilisek a gazda operációs rendszer összes verziójával. Ez a példa a hivatkozásra hivatkozik mcr.microsoft.com/windows/nanoserver:1809. További információ: Windows-tároló verziókompatibilitása.

A következő ServiceManifest.xml egy két CodePackage-ből álló ServicePackage-t ismertet, amelyek tárolókat jelölnek. RunToCompletionCodePackage1 csak naplóz egy üzenetet az stdout-ba , és kilép. RunToCompletionCodePackage2egy ideig pingeli a visszacsatolási címet, majd kilép a , 1vagy 2kilépési 0kóddal.

<?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>

Az alábbi ApplicationManifest.xml a fent említett ServiceManifest.xml alapján ismerteti az alkalmazásokat. A kód a RunToCompletion ExecutionPolicy paramétert WindowsRunToCompletionServicePackage adja meg a következő újraindítási OnFailureszabályzattal: .

Az aktiválás után WindowsRunToCompletionServicePackage a rendszer elindítja a codePackage-eket. RunToCompletionCodePackage1 sikeresen ki kell lépnie az első aktiváláskor. RunToCompletionCodePackage2 nem nulla kilépési kóddal meghiúsulhat, és újraindul, mert az újraindítási szabályzat a OnFailurekövetkező: .

<?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>

Az DeployedServicePackage lekérdezéstelepítési állapota

Lekérdezheti az DeployedServicePackage üzembehelyezési állapotát.

A RunToCompletion szemantika szempontjai

A RunToCompletion támogatásával kapcsolatban vegye figyelembe a következő szempontokat:

  • A RunToCompletion szemantika csak tárolók és vendég végrehajtható alkalmazások esetében támogatott.
  • A RunToCompletion szemantikával rendelkező alkalmazások frissítési forgatókönyvei nem engedélyezettek. Szükség esetén törölnie kell és újra létre kell hoznia az ilyen alkalmazásokat.
  • A feladatátvételi események miatt a CodePackages újrafuthat a sikeres végrehajtás után, ugyanazon a csomóponton vagy a fürt más csomópontjaion. A feladatátvételi események közé tartoznak például a csomópontok újraindításai és a Service Fabric-futtatókörnyezet frissítései egy csomóponton.
  • A RunToCompletion nem kompatibilis a következővel ServicePackageActivationMode="SharedProcess": . A Service Fabric-futtatókörnyezet 9.0-s és újabb verziói nem ellenőrzik az ilyen szolgáltatásokat. SharedProcess az alapértelmezett érték, ezért meg kell adnia ServicePackageActivationMode="ExclusiveProcess" a RunToCompletion szemantika használatát.

Következő lépések