Azure Service Fabric - настройка параметров экземпляра службы с помощью Powershell - PullRequest
0 голосов
/ 09 мая 2018

Можно ли ввести параметры во время выполнения в гостевой исполняемый файл через файл Settings.xml или другим способом? У меня есть GuestExecutable, которому нужно передать некоторую конфигурацию - URL во время создания сервиса.

Мне нужны два экземпляра службы, работающие с разными параметрами, информация об экземпляре службы должна отличаться в зависимости от настраиваемого параметра, через который мне нужно пройти. Возможно ли это с помощью Powershell или мне нужно обновить конфигурацию и создать новую версию?

Заранее спасибо

1 Ответ

0 голосов
/ 10 мая 2018

Вы пробовали следующую команду: New-ServiceFabricApplication?

Когда вы создаете файл манифеста приложения, параметры будут содержать заменяемые параметры, которые вы устанавливаете при регистрации нового приложения.

Пример ApplicationManifest.xml, подобный этому:

<?xml version="1.0" encoding="utf-8"?>
<ApplicationManifest ApplicationTypeName="MyAppTypeName" ApplicationTypeVersion="1.0.0" xmlns=...>
  <Parameters>
    <Parameter Name="Web1_InstanceCount" Value="-1" />
    <Parameter Name="ENVIRONMENT_NAME" Value="DEV" />
    <Parameter Name="FEPlacementConstraints" Value="NodeTypeName==FrontEnd" />
  </Parameters>
  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="MyServicePkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <EnvironmentOverrides />
  </ServiceManifestImport>
  <DefaultServices>
    <Service Name="Web1">
      <StatelessService ServiceTypeName="MyServiceType" InstanceCount="[Web1_InstanceCount]">
        <SingletonPartition />
        <PlacementConstraints>[FEPlacementConstraints]</PlacementConstraints>
      </StatelessService>
    </Service>
  </DefaultServices>
</ApplicationManifest>

Вы могли бы изменить файл настроек, используя переопределения конфигурации следующим образом:

<ConfigOverrides>
  <ConfigOverride Name="Config">
    <Settings>
      <Section Name="MyConfigSection">
        <Parameter Name="MySetting" Value="[ENVIRONMENT_NAME]"/>
      </Section>
    </Settings>
  </ConfigOverride>
</ConfigOverrides>

Или вы можете установить переменные окружения в вашем сервисе так:

<EnvironmentOverrides CodePackageRef="Code">
  <EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="[ENVIRONMENT_NAME]" />
</EnvironmentOverrides>

По моему мнению, переопределения среды лучше сработают в вашем случае, потому что большинство гостевых исполняемых файлов не очень гибки в настройке, но обычно они принимают переменные среды.

Тогда вы:

.

New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-dev -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='DEV'}

New-ServiceFabricApplication -ApplicationName fabric:/myapp/todolist-uat -ApplicationTypeName "MyAppTypeName" -ApplicationTypeVersion "1.0.0" -ApplicationParameter @{Web1_InstanceCount='-1'; ENVIRONMENT_NAME='UAT'}

Единственный недостаток этого подхода заключается в том, что в итоге вы получите два приложения, но не думайте, что это будет для вас проблемой, они будут управляться в основном так же, как и в одном приложении.

если вам строго необходимо запустить оба вместе в одном приложении, вы можете сделать несколько обходных путей:

  • Использование нескольких пакетов Config (не думаю, что будет хорошо работать с гостевыми исполняемыми файлами, но хорошо работает с надежными сервисами

  • Используя сценарий запуска, где вы добавляете логику для передачи параметра в исполняемый файл, что-то вроде следующего:

В вашем ServiceManifest.xml :

  <CodePackage Name="Code" Version="1.0.0">
    <EntryPoint>
      <ExeHost>
        <Program>start.bat</Program>
        <WorkingFolder>CodePackage</WorkingFolder>
      </ExeHost>
    </EntryPoint>
  </CodePackage>

В той же папке (коде) вашего .exe, вы создаете файл start.bat со следующим содержимым:

myApp.exe %EnvironmentVariableNameSetBySF%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...