Keep application old version running side-by-side with the newer version in Azure Service Fabric

前端 未结 2 769
醉酒成梦
醉酒成梦 2021-02-06 16:33

I need to keep several versions of a application running at the same time on Service Fabric.

1.0 1.1 ....

Instead of updating and replacing versions, I need to k

相关标签:
2条回答
  • 2021-02-06 17:07

    As Matt Thalman said, is possible to have different versions of same app running in the Service Fabric cluster.

    I've tested with the sample app WordCount(http://aka.ms/servicefabric-wordcountapp). To see more details how download the app and deploy it, see https://azure.microsoft.com/en-us/documentation/articles/service-fabric-get-started-with-a-local-cluster/

    I've duplicated the WordCount as WordCountV1 and WordCountV2.

    Then I've changed the /ApplicationManifest.xml to have different ApplicationTypeVersion on each package. It's necessary for displaying the current version of the App in the Cluster Manager because both apps are shown grouped by the ApplicationTypeName.

    V1

    <ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="WordCount" ApplicationTypeVersion="1.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    

    V2

    <ApplicationManifest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ApplicationTypeName="WordCount" ApplicationTypeVersion="2.0.0" xmlns="http://schemas.microsoft.com/2011/01/fabric">
    

    Yet I've changed the /WordCountWebServicePkg/Code/wwwroot/index.html file to have different content on both packages.

    Is necessary to specify different Endpoints, so I've changed the file /WordCountWebServicePkg/ServiceManifest.xml in both packages to respond on different Ports

    V1

    <Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8081" />
    

    V2

    <Endpoint Name="ServiceEndpoint" Type="Input" Protocol="http" Port="8082" />
    

    The last step is to use different a ApplicationName to publish packages:

    V1

    Publish-NewServiceFabricApplication -ApplicationPackagePath c:\ServiceFabric\WordCountV1.sfpkg -App
    licationName "fabric:/WordCountV1"
    

    V2

    Publish-NewServiceFabricApplication -ApplicationPackagePath c:\ServiceFabric\WordCountV2.sfpkg -App
    licationName "fabric:/WordCountV2"
    

    Both apps are published side-by-side and we can have more control on version update with that.

    V1

    http://localhost:8081/

    V2

    http://localhost:8082/

    Hope it helps!

    PS: Azure Service Fabric documentation team, this subject can be good to be in public docs

    0 讨论(0)
  • 2021-02-06 17:20

    Yes, you can do this as long as you have different application names. The application name is specified in the application parameters file in your Service Fabric Application (.sfproj) project. That application name value is used when Visual Studio invokes Service Fabric's New-ServiceFabricApplication PowerShell cmdlet. This means you can have two apps running in a cluster with the same application type and version as long as they have different application names. Or you could have different versions of the application type if you wish. As long as they have different application names, it doesn't matter; they're treated as unique applications.

    0 讨论(0)
提交回复
热议问题