【问题标题】:Azure service fabric Instance countAzure 服务结构实例计数
【发布时间】:2016-11-02 10:24:12
【问题描述】:

我正在使用 Azure Service Fabric 开发 POC。在本地集群中部署了我的服务,它在 Local.xml 中的默认设置下运行良好。

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

内部异常: H结果=-2146233088 消息=错误 -4091 EADDRINUSE 地址已在使用中 源=Microsoft.AspNetCore.Server.Kestrel 状态码=-4091

我的local.xml复制到这里

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

非常感谢任何帮助。

谢谢

【问题讨论】:

    标签: c# azure web service azure-appfabric


    【解决方案1】:

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

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

    【讨论】:

    • 较新版本的工具不会因此而失败,而是只会将端点分配给您的一个节点并开始生成有关集群不健康的警告。查看 ETW 事件,您会得到以下内容:“Microsoft.Net.Http.Server.WebListenerException (0x80004005):前缀 'http://+:6001/' 已注册。”
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我没有遇到过这个问题。

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

      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 框架就会自动将服务实例部署到节点/从节点中删除。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2019-10-31
            • 1970-01-01
            • 1970-01-01
            • 2015-12-04
            • 1970-01-01
            • 2016-04-16
            • 2018-06-23
            • 2020-05-12
            • 2017-12-05
            相关资源
            最近更新 更多