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


Inicializáló kódcsomagok

A 7.1-es verziótól kezdődően a Service Fabric támogatja az Initializer CodePackages tárolókhozésvendég végrehajtható alkalmazásokhoz való használatát. Az Inicializáló CodePackages lehetőséget biztosít az inicializálások elvégzésére a ServicePackage hatókörben, mielőtt más CodePackages megkezdené a végrehajtást. A ServicePackage-hez való viszonyuk hasonló ahhoz, amit a SetupEntryPoint a CodePackage-hez jelent.

Mielőtt továbblépnénk a cikkre, javasoljuk, hogy ismerkedjen meg a Service Fabric alkalmazásmodellel és a Service Fabric üzemeltetési modelljével.

Megjegyzés

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

Szemantika

Az Initializer CodePackage futtatása várhatóan sikeres lesz (kilépési kód: 0). A sikertelen Inicializáló CodePackage újraindul, amíg 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.

Inicializáló CodePackages megadása

A CodePackage-et Inicializálóként úgy jelölheti meg, ha az Initializer attribútumot true (igaz ) értékre állítja a ServiceManifestben. Ha több Initializer CodePackage van, azok végrehajtási sorrendje az ExecOrder attribútummal adható meg. Az ExecOrder nem negatív egész szám lehet, és csak az Initializer CodePackages esetében érvényes. Az ExecOrder alacsonyabb értékeit tartalmazó Inicializáló CodePackage-eket először a rendszer hajtja végre. Ha az ExecOrder nincs megadva az Initializer CodePackage elemhez, 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 ismertet, 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 a legalacsonyabb execOrder értékkel rendelkezik. Az InitCodePackage0 sikeres befejezésekor (kilépési kód: 0) a rendszer végrehajtja az InitCodePackage1 parancsot. Végül az InitCodePackage1 sikeres befejezése után a WorkloadCodePackage végrehajtása történik.

<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ó: A Windows tárolóverzió-kompatibilitása.

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ő CodePackages. Aktiváláskor először az InitCodePackage0 lesz végrehajtva. Naplóz egy üzenetet egy fájlba, és kilép. Ezután az InitCodePackage1 lesz végrehajtva, amely egy üzenetet is naplóz egy fájlba, és kilép. Végül a WorkloadCodePackage megkezdi a végrehajtást. Emellett egy üzenetet is naplóz egy fájlba, a fájl tartalmát stdout értékre küldi, 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 ismertetett ServiceManifest.xml alapján ismerteti az alkalmazásokat. Vegye figyelembe, hogy minden tárolóhoz ugyanazt a kötetcsatlakoztatá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 tartalmának a következőnek kell lennie.

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.