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


Futtatás befejezésig

A 7.1-es verziótól kezdve 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 azokat az alkalmazásokat és szolgáltatásokat, amelyek feladatokat hajtanak végre és kilépnek, szemben a mindig futó alkalmazásokkal és szolgáltatásokkal.

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

Feljegyzés

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

RunToCompletion szemantikája és specifikációja

A ServiceManifest importálásakor a RunToCompletion szemantikát ExecutionPolicy is megadhatja. A ServiceManifestből álló Összes CodePackage örökli a megadott szabályzatot. A ApplicationManifest.xml következő kódrészlete tartalmaz egy példát:

<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 ServicePackage-ben a 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 Never: OnFailure alapértelmezett érték.

    • Ha az újraindítási szabályzat értéke OnFailurea 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 úgy van beállítva, hogy Nevera CodePackage sikertelen, az DeploymentServicePackage üzembehelyezési állapota sikertelen, más CodePackages azonban folytatja a végrehajtást.

Ha a ServicePackage összes CodePackage-példánya a kilépési kóddal 0való sikeres befejezéshez fut, akkor az DeploymentServicePackage üzembehelyezési állapota RanToCompletion jelöléssel van megjelölve.

Példa kódra a RunToCompletion szemantikával

Tekintsünk meg egy teljes példát, amely a RunToCompletion szemantikájá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 gazdagép operációs rendszerének minden verziójával. Ez a példa a hivatkozásra hivatkozik mcr.microsoft.com/windows/nanoserver:1809. További információ: Windows-tárolók verziókompatibilitása.

Az alábbi ServiceManifest.xml két CodePackage-ből álló ServicePackage-t ír le, amelyek tárolókat jelölnek. RunToCompletionCodePackage1csak naplóz egy üzenetet a kilépéshez és a kilépéshez. RunToCompletionCodePackage2egy ideig pingeli a visszacsatolási címet, majd kilép egy , 01vagy 2.

<?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 WindowsRunToCompletionServicePackage parancsot adja meg a következő újraindítási OnFailureszabályzattal: .

Aktiváláskor WindowsRunToCompletionServicePackage a rendszerindító CodePackage-jai elindulnak. RunToCompletionCodePackage1 az első aktiváláskor sikeresen ki kell lépnie. RunToCompletionCodePackage2nem nulla kilépési kóddal meghiúsulhat, és újraindul, mert az újraindítási szabályzat .OnFailure

<?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 DeploymentServicePackage üzembehelyezési állapotának lekérdezése

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

A RunToCompletion szemantikájának szempontjai

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

  • A RunToCompletion szemantikája 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 befejezés után, ugyanazon a csomóponton vagy a fürt más csomópontján. 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 9.0-s és újabb verziója nem ellenőrzi 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