Dela via


RunToCompletion

Från och med version 7.1 stöder Service Fabric RunToCompletion-semantik för containrar och körbara gästprogram. Dessa semantik möjliggör program och tjänster som slutför en uppgift och avslutar, till skillnad från att alltid köra program och tjänster.

Innan du fortsätter med den här artikeln bör du känna till Service Fabric-programmodellen och Service Fabric-värdmodellen.

Kommentar

RunToCompletion-semantik stöds inte för tjänster som använder programmeringsmodellen Reliable Services .

RunToCompletion-semantik och specifikation

Du kan ange RunToCompletion-semantik som en ExecutionPolicy när du importerar ServiceManifest. Alla CodePackages som består av ServiceManifest ärver den angivna principen. Följande kodfragment från ApplicationManifest.xml innehåller ett exempel:

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

ExecutionPolicy tillåter två attribut:

  • Type har RunToCompletion som det enda tillåtna värdet.

  • Restart anger den omstartsprincip som ska tillämpas på CodePackages i ServicePackage vid fel. En CodePackage som avslutas med en slutkod som inte är noll anses ha misslyckats. Tillåtna värden för det här attributet är OnFailure och Never, med OnFailure som standard.

    • Med omstartsprincipen inställd på OnFailure, startar alla CodePackage som misslyckas med en slutkod som inte är noll, med back-offs mellan upprepade fel.

    • Med omstartsprincipen inställd på Never, om någon CodePackage misslyckas, är distributionsstatusen för DeployedServicePackage markerad som Misslyckad, men andra CodePackages fortsätter att köras.

Om alla CodePackages i ServicePackage körs till slutförd med slutkoden 0markeras distributionsstatusen för DeployedServicePackage som RanToCompletion.

Kodexempel med RunToCompletion-semantik

Nu ska vi titta på ett fullständigt exempel som använder RunToCompletion-semantik.

Viktigt!

I följande exempel förutsätter vi att du är bekant med att skapa Windows-containerprogram med Hjälp av Service Fabric och Docker.

Windows Server-containrar är inte kompatibla i alla versioner av ett värdoperativsystem. Det här exemplet refererar till mcr.microsoft.com/windows/nanoserver:1809. Mer information finns i Windows-containerversionskompatibilitet.

Följande ServiceManifest.xml beskriver en ServicePackage som består av två CodePackages, som representerar containrar. RunToCompletionCodePackage1 loggar bara ett meddelande till stdout och avslutar. RunToCompletionCodePackage2 pingar loopback-adressen ett tag och avslutas sedan med en slutkod på antingen 0, 1eller 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>

Följande ApplicationManifest.xml beskriver ett program baserat på de ServiceManifest.xml som beskrivs ovan. Koden anger RunToCompletion ExecutionPolicy för WindowsRunToCompletionServicePackage med en omstartsprincip på OnFailure.

Vid WindowsRunToCompletionServicePackage aktivering startas dess komponenter CodePackages. RunToCompletionCodePackage1 avslutas vid den första aktiveringen. RunToCompletionCodePackage2 kan misslyckas med en slutkod som inte är noll och startas om eftersom omstartsprincipen är 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>

Frågedistributionsstatus för en DeployedServicePackage

Du kan fråga distributionsstatus för en DeployedServicePackage.

Överväganden för RunToCompletion-semantik

Överväg följande punkter om Stöd för RunToCompletion:

  • RunToCompletion-semantik stöds endast för containrar och körbara gästprogram.
  • Uppgraderingsscenarier för program med RunToCompletion-semantik tillåts inte. Du måste ta bort och återskapa sådana program om det behövs.
  • Redundanshändelser kan leda till att CodePackages körs igen när det har slutförts, på samma nod eller på andra noder i klustret. Exempel på redundanshändelser är omstarter av noder och Service Fabric-körningsuppgraderingar på en nod.
  • RunToCompletion är inte kompatibelt med ServicePackageActivationMode="SharedProcess". Service Fabric Runtime version 9.0 och senare misslyckas med validering för sådana tjänster. SharedProcess är standardvärdet, så du måste ange ServicePackageActivationMode="ExclusiveProcess" för att använda RunToCompletion-semantik.

Nästa steg