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
azRunToCompletion
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
ésNever
,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 0
való 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. RunToCompletionCodePackage2
egy ideig pingeli a visszacsatolási címet, majd kilép a , 1
vagy 2
kilépési 0
kó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 && 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 paramétert WindowsRunToCompletionServicePackage
adja meg a következő újraindítási OnFailure
szabá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 OnFailure
kö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 PowerShellben használja a Get-ServiceFabricDeployedServicePackage parancsot
- A C#-ban használja a FabricClient API GetDeployedServicePackageListAsync(String, Uri, String) parancsot.
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 adniaServicePackageActivationMode="ExclusiveProcess"
a RunToCompletion szemantika használatát.