Azure service fabric 引用多个外部Web API的单服务结构应用程序';s

Azure service fabric 引用多个外部Web API的单服务结构应用程序';s,azure-service-fabric,Azure Service Fabric,我的问题有点类似于,但答案并不能真正帮助我,除非我遗漏了什么 如果我想将10+个无状态服务(基于OWIN的Web API)部署到服务结构集群中,根据我对ASF的理解,我会: 在Visual Studio中创建新的Service Fabric应用程序(称之为“MyBackendServices”) 创建10多个无状态Web API 将它们添加到服务结构应用程序 部署到集群 但是,这难道不包括在与服务结构应用程序相同的VisualStudio解决方案中创建所有Web API吗 我担心的是,如果我们想

我的问题有点类似于,但答案并不能真正帮助我,除非我遗漏了什么

如果我想将10+个无状态服务(基于OWIN的Web API)部署到服务结构集群中,根据我对ASF的理解,我会:

  • 在Visual Studio中创建新的Service Fabric应用程序(称之为“MyBackendServices”)
  • 创建10多个无状态Web API
  • 将它们添加到服务结构应用程序
  • 部署到集群
  • 但是,这难道不包括在与服务结构应用程序相同的VisualStudio解决方案中创建所有Web API吗

    我担心的是,如果我们想让团队完全自治,他们理想情况下不需要共享相同的VisualStudio解决方案

    目前,每个“团队”都有自己的GitHub存储库和VisualStudio解决方案,每个API都是独立部署的

    我希望将此设置移植到ASF,在ASF中,每个Web API都是它自己的解决方案,它们以某种方式打包到一个服务结构应用程序中

    有人能帮我吗


    谢谢

    我将每项服务都保存在自己的解决方案(和repo)中,并仅在部署时将其整合到单个应用程序中。生成和部署通过PowerShell进行,PowerShell可作为CI/CD进程的一部分触发。只修改更新的服务,我让它使用当前日期/时间自动更新清单版本

    对于具有其他服务依赖项的服务,我已经在解决方案中引用了它们的项目,以便可以轻松地进行调试,但只部署了主服务

    在答案中添加更多细节,注释块太小。

    我创建了一个目录,将发布版本放在正确的SF目录结构中。我将发行版的ApplicationManifest.xml复制到该目录中,尽管您可以将其作为repo并检入该文件。我有一个buildrelease.ps1,它枚举repo并为发布配置运行msbuild。对于该配置,我只构建要部署的服务(没有用于调试目的的单元测试或其他测试应用程序)。版本根据日期和时间自动生成,例如2017年05月31日1702。这是在服务清单中以及最终在应用程序清单中更新的内容。成功生成后,服务清单将更新回解决方案目录,如下所示:

        $serviceManifestPath = "$solutionDir\src\${ServiceName}Service\PackageRoot\ServiceManifest.xml"
    Set-ItemProperty $serviceManifestPath -name IsReadOnly -value $false
    
    $serviceManifestXml = [xml](Get-Content $serviceManifestPath)
    $ns = New-Object System.Xml.XmlNamespaceManager($serviceManifestXml.NameTable)
    $ns.AddNamespace("ns", $serviceManifestXml.DocumentElement.NamespaceURI)
    
    $serviceManifestXml.ServiceManifest.Version = $NewVersion
    $serviceManifestXml.ServiceManifest.CodePackage.Version = $NewVersion
    $serviceManifestXml.ServiceManifest.ConfigPackage.Version = $NewVersion
    $serviceManifestXml.Save($serviceManifestPath)
    
    再次调用下一个msbuild来打包SFProj

    $buildResult = & $msBuild $sfproj /p:Configuration=Release /nologo /v:M /fl /flp:LogFile="msbuild.log;Verbosity=Normal" /nr:false /target:package
    
    今天,我只构建具有修改过的服务清单的服务,因此在修改代码/配置时必须记住修改清单。我想改进一下,只是时间不够

    打包后,解决方案的发行版{service name}service.pkg将复制到发行版文件夹中。脚本完成后,生成的目录包含正确格式的任何更改的服务


    下一个脚本是每个集群的部署脚本。我相信可以创建一个数据驱动的。这将连接到远程集群,测试包,将包上载到映像存储,并根据应用程序是否已存在执行新的或升级。我有一个版本可以部署到我的one box中,这样我就可以使用本地配置测试/调试一起运行的所有服务。

    为什么不能将每个服务放在自己的应用程序中?这就是我正在做的。看来效果不错。@mardoxx你能详细说明一下吗?您如何决定何时在应用程序中将它们组合在一起?如果情况需要或不需要;)我不完全确定!我想,如果您需要一个简单的可部署多租户解决方案,那么您将在一个应用程序中实现所有功能。应用程序的服务可以独立升级,但让每个服务在自己的err soirce存储库中独立开发不是很友好。谢谢,这就是我想要的。您是否有机会分享一些关于如何实现这一点的代码片段或文档?您是否有只包含service fabric应用程序清单的存储库/sln?然后您的CI将所有不同的存储库克隆到一个文件夹中,然后运行部署脚本,就好像它们总是在一个地方一样,等等?事实上,我很想看到您对此的响应,Toddyne,我有一个包含在单个目录结构中的单个应用程序,以及一个ApplicationManifest。然后,我的CI脚本将源的ServiceManifest与相应发布目录中的当前版本进行比较,如果有任何更改,我将更新清单中所有内容的版本,并复制代码、配置和数据。我对2017-11-13-1700等版本使用生成日期格式。这就是放入舱单的内容。