4

我正在使用 azure service fabric 开发 POC。将我的服务部署在本地集群中,并且使用 Local.xml 中的默认设置可以正常工作。

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

InnerException: HResult=-2146233088 Message=Error -4091 EADDRINUSE 地址已在使用中 Source=Microsoft.AspNetCore.Server.Kestrel StatusCode=-4091

我的 local.xml 被复制到这里

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

任何帮助都非常感谢。

谢谢

4

5 回答 5

6

根据微软官方文档,部署到本地集群时需要保证服务只有一个实例在运行,否则会遇到多个进程监听同一个端口的冲突。部署时可以设置多个实例到天青。

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

于 2016-06-30T11:42:13.203 回答
3

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

Service.Endpoint 使用端口 8090。这在 ServiceManifest.xml 中定义。在本地集群中,实际上一切都只在一个节点上运行,即您的开发机器。如果您尝试使用硬定义的端口创建 2 个相同服务的实例,那么您将收到端口已在使用错误。

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

于 2016-11-17T10:54:40.403 回答
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 框架就会自动将服务实例部署到节点/从节点中删除。

于 2017-03-22T09:59:41.353 回答
1

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

于 2016-06-30T19:11:18.193 回答
-1

我们有一个类似的问题,并通过构建脚本解决了它。您可以通过构建脚本替换 ServiceManifest 或使用 Tokenizer 替换端口值。

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

于 2017-03-02T17:52:04.303 回答