Azure服务结构实例计数

时间:2016-06-30 10:58:57

标签: c# azure web service azure-appfabric

我正在使用天蓝色服务面料进行POC。在本地群集中部署我的服务,并且它在Local.xml中使用默认设置正常工作。

当我更改实例时,它会抛出以下异常。更改实例计数的选项在哪里?基本上我现在尝试在两个节点上运行我的服务。当默认值为1时,它正常工作。

的InnerException:        的HResult = -2146233088        消息=错误-4091 EADDRINUSE地址已在使用中        来源= Microsoft.AspNetCore.Server.Kestrel        的StatusCode = -4091

我的local.xml被复制到这里

  <Parameters>
    <Parameter Name="Product_InstanceCount" Value="2" />
  </Parameters>

任何帮助都非常感激。

由于

5 个答案:

答案 0 :(得分:6)

根据Microsoft官方文档,您需要确保在部署到本地群集时只运行一个服务实例。否则,您将遇到与侦听同一端口的多个进程冲突。您可以设置多个实例部署到Azure时。

参考文件: - https://azure.microsoft.com/en-us/documentation/articles/service-fabric-add-a-web-frontend/

答案 1 :(得分:3)

使用本地sf群集时,如果已修复服务端点端口,请仅使用一个实例。例如:

Service.Endpoint使用端口8090.这是在ServiceManifest.xml中定义的。在本地集群中,实际上所有内容都只在一个节点上运行,即您的开发机器如果您尝试使用硬定义端口创建2个相同服务的实例,那么您将获得Port in in use error。

尝试更改为一个实例或将其移至实际的Azure群集或删除硬编码的端口号。

答案 2 :(得分:2)

我没有遇到过这个问题。

您可以使用结构客户端以编程方式更改实例计数:

var fabricClient = new FabricClient();
var instanceCount = 3;
var services = await fabricClient.QueryManager.GetServiceListAsync(new Uri("fabric:/MyMicroServiceApp"));
var service = services.FirstOrDefault(e => e.ServiceName.AbsolutePath.Contains("MyService"));
var updateDescription = new StatelessServiceUpdateDescription();
updateDescription.InstanceCount = instanceCount;
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri(service.ServiceName.AbsoluteUri), updateDescription);

我用它来开发一个概念证明,根据队列的大小增加工作进程的数量。 一旦更改了服务的实例计数,Service Fabric框架就会自动向/从节点部署/删除服务实例。

答案 3 :(得分:1)

如果您正在运行某种类型的ASP.Net或Owin托管服务。您必须使用-1的实例计数。这将在每个节点上设置一个实例。如果实例数为2,则会得到2个实例,这些实例可能在同一节点上,也可能不在同一节点上。

答案 4 :(得分:-1)

我们遇到了类似的问题,并使用构建脚本解决了这个问题。您可以通过构建脚本替换ServiceManififest,也可以使用Tokenizer替换端口值。

在本地,您可以创建和安装更新/调整的软件包文件,并使用DeployFabricApplciation进行部署,并以此方式对其进行测试。