Megosztás a következőn keresztül:


Inicializáló kódcsomagok

A Service Fabric a 7.1-es verziótól kezdve támogatja a tárolókhoz és vendég végrehajtható alkalmazásokhoz készült Initializer CodePackages szolgáltatást. Az inicializáló CodePackages lehetővé teszik az inicializálásokat a ServicePackage hatókörben, mielőtt más CodePackages-műveletek megkezdik a végrehajtást. A ServicePackage-hez való viszonyuk hasonló ahhoz, amit a SetupEntryPoint egy CodePackage-hoz készült.

Mielőtt folytatnánk ezt a cikket, javasoljuk, hogy ismerkedjen meg a Service Fabric alkalmazásmodelljével és a Service Fabric üzemeltetési modelljével.

Feljegyzés

Az Initializer CodePackages jelenleg nem támogatott a Reliable Services programozási modellel írt szolgáltatások esetében.

Szemantika

Az Inicializáló CodePackage várhatóan sikeresen befejeződik (kilépési kód: 0). A sikertelen Inicializáló CodePackage mindaddig újraindul, amíg az sikeresen be nem fejeződik. Több Inicializáló CodePackage engedélyezett, és a végrehajtás sikeres befejezése után, sorrendben, egy megadott sorrendben történik, mielőtt a ServicePackage más CodePackage-jei megkezdik a végrehajtást.

Initializer CodePackages megadása

A CodePackage inicializálóként való megjelöléséhez állítsa az Initializer attribútumot igaz értékre a ServiceManifestben. Ha több Initializer CodePackage van, a végrehajtás sorrendje az ExecOrder attribútumon keresztül adható meg. Az ExecOrder nem negatív egész szám lehet, és csak az Initializer CodePackages esetében érvényes. Először az ExecOrder alacsonyabb értékeit tartalmazó Inicializáló CodePackage-eket hajtja végre a rendszer. Ha az ExecOrder nincs megadva inicializáló CodePackage-hez, a rendszer 0 alapértelmezett értéket feltételez. Az Azonos ExecOrder értékkel rendelkező Initializer CodePackages relatív végrehajtási sorrendje nincs meghatározva.

Az alábbi ServiceManifest-kódrészlet három CodePackage-et ír le, amelyek közül kettő Inicializálóként van megjelölve. A ServicePackage aktiválása után először az InitCodePackage0 lesz végrehajtva, mivel az ExecOrder értéke a legalacsonyabb. Az InitCodePackage0 sikeres befejezésekor (kilépési kód: 0) a rendszer végrehajtja az InitCodePackage1-et. Végül az InitCodePackage1 sikeres befejezése után a WorkloadCodePackage végrehajtásra kerül.

<CodePackage Name="InitCodePackage0" Version="1.0" Initializer="true" ExecOrder="0">
  ...
</CodePackage>

<CodePackage Name="InitCodePackage1" Version="1.0" Initializer="true" ExecOrder="1">
  ...
</CodePackage>

<CodePackage Name="WorkloadCodePackage" Version="1.0">
  ...
</CodePackage>

Teljes példa az Initializer CodePackages használatával

Tekintsünk meg egy teljes példát az Initializer CodePackages használatával.

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.

Ez a példa mcr.microsoft.com/windows/nanoserver:1809 hivatkozik. A Windows Server-tárolók nem kompatibilisek a gazdagép operációs rendszerének összes verziójával. További információkért tekintse meg a Windows tárolóverzió kompatibilitását.

Az alábbi ServiceManifest.xml a korábban ismertetett ServiceManifest-kódrészletre épül. Az InitCodePackage0, az InitCodePackage1 és a WorkloadCodePackage a tárolókat képviselő CodePackage. Aktiváláskor először az InitCodePackage0 lesz végrehajtva. Naplóz egy üzenetet egy fájlba, és kilép. A következő lépés az InitCodePackage1 végrehajtása, amely egy üzenetet is naplóz egy fájlba, és kilép. Végül a WorkloadCodePackage megkezdi a végrehajtást. Emellett naplóz egy üzenetet egy fájlba, a fájl tartalmát stdout-ra adja ki, majd örökre pingel.

<?xml version="1.0" encoding="UTF-8"?>
<ServiceManifest Name="WindowsInitCodePackageServicePackage" Version="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Description>Windows Init CodePackage Service</Description>
  <ServiceTypes>
    <StatelessServiceType ServiceTypeName="WindowsInitCodePackageServiceType"  UseImplicitHost="true"/>
  </ServiceTypes>
  <CodePackage Name="InitCodePackage0" Version="1.0" Initializer="true" ExecOrder="0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/c,echo Hi from InitCodePackage0. &gt; C:\WorkspaceOnContainer\log.txt</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>

  <CodePackage Name="InitCodePackage1" Version="1.0" Initializer="true" ExecOrder="1">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/c,echo Hi from InitCodePackage1. &gt;&gt; C:\WorkspaceOnContainer\log.txt</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>

  <CodePackage Name="WorkloadCodePackage" Version="1.0">
    <EntryPoint>
      <ContainerHost>
        <ImageName>mcr.microsoft.com/windows/nanoserver:1809</ImageName>
        <Commands>/c,echo Hi from WorkloadCodePackage. &gt;&gt; C:\WorkspaceOnContainer\log.txt &amp;&amp; type C:\WorkspaceOnContainer\log.txt &amp;&amp; ping -t 127.0.0.1 &gt; nul</Commands>
        <EntryPoint>cmd</EntryPoint>
      </ContainerHost>
    </EntryPoint>
  </CodePackage>
</ServiceManifest>

Az alábbi ApplicationManifest.xml a fent tárgyalt ServiceManifest.xml alapuló alkalmazást ismerteti. Vegye figyelembe, hogy az összes tárolóhoz ugyanazt a kötetcsatlakozást adja meg, azaz a C:\WorkspaceOnHost a C:\WorkspaceOnContainer helyen van csatlakoztatva mindhárom tárolóhoz. A nettó hatás az, hogy az összes tároló ugyanarra a naplófájlra ír az aktiválásuk sorrendjében.

<?xml version="1.0" encoding="UTF-8"?>
<ApplicationManifest ApplicationTypeName="WindowsInitCodePackageApplicationType" ApplicationTypeVersion="1.0" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <Description>Windows Init CodePackage Application</Description>

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="WindowsInitCodePackageServicePackage" ServiceManifestVersion="1.0"/>
    <Policies>
      <ContainerHostPolicies CodePackageRef="InitCodePackage0" ContainersRetentionCount="2" RunInteractive="true">
        <Volume Source="C:\WorkspaceOnHost" Destination="C:\WorkspaceOnContainer" IsReadOnly="false" />
      </ContainerHostPolicies>

     <ContainerHostPolicies CodePackageRef="InitCodePackage1" ContainersRetentionCount="2" RunInteractive="true">
        <Volume Source="C:\WorkspaceOnHost" Destination="C:\WorkspaceOnContainer" IsReadOnly="false" />
      </ContainerHostPolicies>

      <ContainerHostPolicies CodePackageRef="WorkloadCodePackage" ContainersRetentionCount="2" RunInteractive="true">
        <Volume Source="C:\WorkspaceOnHost" Destination="C:\WorkspaceOnContainer" IsReadOnly="false" />
      </ContainerHostPolicies>
    </Policies>
  </ServiceManifestImport>

  <DefaultServices>
    <Service Name="WindowsInitCodePackageService" ServicePackageActivationMode="ExclusiveProcess">
      <StatelessService ServiceTypeName="WindowsInitCodePackageServiceType" InstanceCount="1">
        <SingletonPartition />
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

A ServicePackage sikeres aktiválása után a C:\WorkspaceOnHost\log.txt tartalma a következő legyen.

C:\Users\test>type C:\WorkspaceOnHost\log.txt
Hi from InitCodePackage0.
Hi from InitCodePackage1.
Hi from WorkloadCodePackage.

Következő lépések

A kapcsolódó információkért tekintse meg az alábbi cikkeket.