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
azRunToCompletion
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őkOnFailure
Never
:OnFailure
alapértelmezett érték.Ha az újraindítási szabályzat értéke
OnFailure
a 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
Never
a 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 0
való 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. RunToCompletionCodePackage1
csak naplóz egy üzenetet a kilépéshez és a kilépéshez. RunToCompletionCodePackage2
egy ideig pingeli a visszacsatolási címet, majd kilép egy , 0
1
vagy 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 && 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 && set /a exitCode=%random% % 3 && 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 OnFailure
szabályzattal: .
Aktiváláskor WindowsRunToCompletionServicePackage
a rendszerindító CodePackage-jai elindulnak. RunToCompletionCodePackage1
az első aktiváláskor sikeresen ki kell lépnie. RunToCompletionCodePackage2
nem 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 PowerShellben használja a Get-ServiceFabricDeployedServicePackage parancsot
- A C#-ból használja a FabricClient API GetDeployedServicePackageListAsync(Sztring, Uri, Sztring).
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 adniaServicePackageActivationMode="ExclusiveProcess"
a RunToCompletion szemantika használatát.