RunToCompletion
A partire dalla versione 7.1, Service Fabric supporta la semantica RunToCompletion per contenitori e applicazioni eseguibili guest. Queste semantiche consentono applicazioni e servizi che completano un'attività e escono, invece di eseguire sempre applicazioni e servizi.
Prima di procedere con questo articolo, acquisire familiarità con il modello di applicazione di Service Fabric e il modello di hosting di Service Fabric.
Nota
La semantica RunToCompletion non è supportata per i servizi che usano il modello di programmazione Reliable Services .
Semantica e specifica RunToCompletion
È possibile specificare la semantica RunToCompletion come oggetto ExecutionPolicy
quando si importa ServiceManifest. Tutti i CodePackage che comprendono ServiceManifest ereditano i criteri specificati. Il frammento di codice seguente da ApplicationManifest.xml fornisce un esempio:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="RunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
<Policies>
<ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
</Policies>
</ServiceManifestImport>
ExecutionPolicy
consente due attributi:
Type
haRunToCompletion
come solo valore consentito.Restart
specifica i criteri di riavvio da applicare a CodePackage in ServicePackage in caso di errore. Un CodePackage che termina con un codice di uscita diverso da zero viene considerato non riuscito. I valori consentiti per questo attributo sonoOnFailure
e ,Never
conOnFailure
come impostazione predefinita.Con il criterio di riavvio impostato su
OnFailure
, qualsiasi CodePackage che ha esito negativo con un riavvio del codice di uscita diverso da zero, con back-off tra errori ripetuti.Con il criterio di riavvio impostato su
Never
, se qualsiasi CodePackage ha esito negativo, lo stato di distribuzione del pacchetto DeployServicePackage è contrassegnato Non riuscito, ma altri CodePackage continuano l'esecuzione.
Se tutti i CodePackage nel ServicePackage vengono eseguiti per il completamento con esito positivo con il codice 0
di uscita, lo stato di distribuzione di DeployServicePackage è contrassegnato come RanToCompletion.
Esempio di codice che usa la semantica RunToCompletion
Esaminiamo un esempio completo che usa la semantica RunToCompletion.
Importante
Nell'esempio seguente si presuppone familiarità con la creazione di applicazioni contenitore Windows tramite Service Fabric e Docker.
I contenitori di Windows Server non sono compatibili in tutte le versioni di un sistema operativo host. Questo esempio fa riferimento a mcr.microsoft.com/windows/nanoserver:1809
. Per altre informazioni, vedere Compatibilità della versione del contenitore Di Windows.
L 'ServiceManifest.xml seguente descrive un ServicePackage costituito da due CodePackage, che rappresentano contenitori. RunToCompletionCodePackage1
registra semplicemente un messaggio a stdout e chiude. RunToCompletionCodePackage2
esegue il ping dell'indirizzo di loopback per un po' e quindi termina con un codice di uscita di 0
, 1
o 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>
La ApplicationManifest.xml seguente descrive un'applicazione in base alla ServiceManifest.xml illustrata in precedenza. Il codice specifica RunToCompletion ExecutionPolicy per WindowsRunToCompletionServicePackage
con un criterio di riavvio di OnFailure
.
Al momento WindowsRunToCompletionServicePackage
dell'attivazione, vengono avviati i pacchetti CodePackage costitutivi. RunToCompletionCodePackage1
deve uscire correttamente al primo attivazione. RunToCompletionCodePackage2
può avere esito negativo con un codice di uscita diverso da zero e verrà riavviato perché il criterio di riavvio è 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>
Eseguire query sullo stato della distribuzione di un pacchetto DeployServicePackage
È possibile eseguire query sullo stato di distribuzione di un Pacchetto DeployServicePackage.
- Da PowerShell usare Get-ServiceFabricDeployedServicePackage
- Da C#, usare l'API FabricClientGetDeployedServicePackageListAsync(String, Uri, String).
Considerazioni sulla semantica RunToCompletion
Prendere in considerazione i punti seguenti sul supporto di RunToCompletion:
- La semantica RunToCompletion è supportata solo per i contenitori e le applicazioni eseguibili guest.
- Gli scenari di aggiornamento per le applicazioni con semantica RunToCompletion non sono consentiti. Se necessario, è necessario eliminare e ricreare tali applicazioni.
- Gli eventi di failover possono causare l'esecuzione di CodePackages dopo il completamento corretto, nello stesso nodo o in altri nodi del cluster. Esempi di eventi di failover sono i riavvii dei nodi e gli aggiornamenti del runtime di Service Fabric in un nodo.
- RunToCompletion non è compatibile con
ServicePackageActivationMode="SharedProcess"
. Service Fabric runtime versione 9.0 e successiva non riesce la convalida per tali servizi.SharedProcess
è il valore predefinito, quindi è necessario specificareServicePackageActivationMode="ExclusiveProcess"
per usare la semantica RunToCompletion.