RunToCompletion
Począwszy od wersji 7.1, usługa Service Fabric obsługuje semantyka RunToCompletion dla kontenerów i aplikacji wykonywalnych gościa. Te semantyka umożliwia aplikacjom i usługom, które zakończą zadanie i zakończą pracę, w przeciwieństwie do zawsze uruchomionych aplikacji i usług.
Przed kontynuowaniem pracy z tym artykułem zapoznaj się z modelem aplikacji usługi Service Fabric i modelem hostingu usługi Service Fabric.
Uwaga
Semantyka RunToCompletion nie jest obsługiwana w przypadku usług korzystających z modelu programowania usług Reliable Services .
Semantyka i specyfikacja RunToCompletion
Podczas importowania programu ServiceManifest można określić semantyka ExecutionPolicy
RunToCompletion. Wszystkie pakiety CodePackage składające się z programu ServiceManifest dziedziczą określone zasady. Poniższy fragment kodu z ApplicationManifest.xml zawiera przykład:
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="RunToCompletionServicePackage" ServiceManifestVersion="1.0"/>
<Policies>
<ExecutionPolicy Type="RunToCompletion" Restart="OnFailure"/>
</Policies>
</ServiceManifestImport>
ExecutionPolicy
zezwala na dwa atrybuty:
Type
maRunToCompletion
jako jedyną dozwoloną wartość.Restart
określa zasady ponownego uruchamiania, które mają być stosowane do pakietu CodePackage w ramach pakietu ServicePackage w przypadku awarii. Pakiet CodePackage, który kończy działanie z kodem zakończenia bez zera, jest uznawany za nieudany. Dozwolone wartości dla tego atrybutu toOnFailure
iNever
, z wartościami domyślnymiOnFailure
.Po ustawieniu zasad ponownego uruchamiania na
OnFailure
wartość wszystkie pakiety CodePackage, które kończą się niepowodzeniem z ponownym uruchomieniem kodu zakończenia bez zera, z wycofywaniem między powtarzającymi się awariami.Po ustawieniu zasad ponownego uruchamiania na
Never
wartość , jeśli jakikolwiek pakiet CodePackage ulegnie awarii, stan wdrożenia pakietu DeployedServicePackage jest oznaczony jako Niepowodzenie, ale inne pakiety CodePackage kontynuują wykonywanie.
Jeśli wszystkie pakiety CodePackage w usłudze ServicePackage zostaną uruchomione w celu pomyślnego ukończenia z kodem 0
zakończenia, stan wdrożenia wdrożonego pakietuServicePackage zostanie oznaczony jako RanToCompletion.
Przykładowy kod korzystający z semantyki RunToCompletion
Przyjrzyjmy się kompletnego przykładu, który używa semantyki RunToCompletion.
Ważne
W poniższym przykładzie założono, że znajomość tworzenia aplikacji kontenera systemu Windows przy użyciu usługi Service Fabric i platformy Docker.
Kontenery systemu Windows Server nie są zgodne ze wszystkimi wersjami systemu operacyjnego hosta. Ten przykład odwołuje mcr.microsoft.com/windows/nanoserver:1809
się do . Aby uzyskać więcej informacji, zobacz zgodność wersji kontenera systemu Windows.
W poniższym ServiceManifest.xml opisano pakiet ServicePackage składający się z dwóch elementów CodePackage reprezentujących kontenery. RunToCompletionCodePackage1
po prostu rejestruje komunikat do stdout i kończy działanie. RunToCompletionCodePackage2
polecenie ping adres sprzężenia zwrotnego przez pewien czas, a następnie kończy działanie z kodem 0
zakończenia polecenia , 1
lub 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>
Poniższy ApplicationManifest.xml opisuje aplikację na podstawie ServiceManifest.xml omówionych powyżej. Kod określa element RunToCompletion ExecutionPolicy dla WindowsRunToCompletionServicePackage
polecenia z zasadami ponownego uruchamiania elementu OnFailure
.
Po WindowsRunToCompletionServicePackage
aktywacji uruchamiane są jego składniki CodePackages. RunToCompletionCodePackage1
powinno zakończyć się pomyślnie przy pierwszej aktywacji. RunToCompletionCodePackage2
program może zakończyć się niepowodzeniem z kodem zakończenia bez zera i zostanie uruchomiony ponownie, ponieważ zasady ponownego uruchamiania to 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>
Stan wdrożenia zapytania wdrożonego pakietuServicePackage
Możesz wykonać zapytanie dotyczące stanu wdrożenia wdrożonego pakietuServicePackage.
- W programie PowerShell użyj polecenia Get-ServiceFabricDeployedServicePackage
- W języku C# użyj interfejsu API FabricClientGetDeployedServicePackageListAsync(String, URI, String).
Zagadnienia dotyczące semantyki RunToCompletion
Należy wziąć pod uwagę następujące kwestie dotyczące obsługi funkcji RunToCompletion:
- Semantyka RunToCompletion jest obsługiwana tylko w przypadku kontenerów i aplikacji wykonywalnych gościa.
- Scenariusze uaktualniania aplikacji z semantykami RunToCompletion nie są dozwolone. W razie potrzeby należy usunąć i ponownie utworzyć takie aplikacje.
- Zdarzenia trybu failover mogą spowodować ponowne wykonanie pakietów CodePackage po pomyślnym zakończeniu w tym samym węźle lub w innych węzłach klastra. Przykładami zdarzeń trybu failover są ponowne uruchomienia węzła i uaktualnienia środowiska uruchomieniowego usługi Service Fabric w węźle.
- Element RunToCompletion jest niezgodny z elementem
ServicePackageActivationMode="SharedProcess"
. Sprawdzanie poprawności takich usług w środowisku uruchomieniowym usługi Service Fabric w wersji 9.0 lub nowszej kończy się niepowodzeniem.SharedProcess
jest wartością domyślną, dlatego należy określićServicePackageActivationMode="ExclusiveProcess"
, aby używać semantyki RunToCompletion.
Następne kroki
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla