繁体   English   中英

在服务结构的不同端口上运行的多个红隼无状态服务实例

[英]Multiple kestrel stateless service instances running on different ports in service fabric

我使用示例默认值在 Visual Studio 2019 中创建了无状态服务(创建新项目 -> Service Fabric 应用程序 -> 命名项目和解决方案 -> 无状态 ASP.NET 核心服务)。

运行没有任何更改的天气预报应用程序工作正常,我可以看到该应用程序在 Service Fabric 资源管理器中运行,并看到我的 5 个健康(本地开发)节点和 1 个绿色应用程序。

如果我修改Local.5Node.xml将 InstanceCount 从 1 更改为 -1

<?xml version="1.0" encoding="utf-8"?>
<Application xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="fabric:/SampleApp" xmlns="http://schemas.microsoft.com/2011/01/fabric">
  <Parameters>
    <Parameter Name="SampleApp_ASPNETCORE_ENVIRONMENT" Value="Development" />
    <Parameter Name="SampleApp_InstanceCount" Value="-1" />
  </Parameters>
</Application>

我可以看到在单个分区下创建了五个实例,但其中四个被困在“InBuild”中: 在此处输入图像描述

在我在 VS2019 中运行的应用程序中,诊断 window 显示进程不断无法启动:

在此处输入图像描述

经过进一步检查,我发现新实例正试图在同一个端口上启动。

在此处输入图像描述

端口分配如何在具有多个无状态 web 服务实例的 Service Fabric 中工作? 是否需要带有反向代理的网关来发现每个实例? 如果没有自定义解决方案,是否可以在 Service Fabric 中自动缩放无状态 web 服务?

Kestrel 不支持端口共享,因此一旦一项服务声明了该端口,在同一台机器上运行的其他服务(这里:您的开发机器)就不能。

最简单的解决方法是在开发集群上运行时创建1个服务实例。 解决此问题的另一种方法是在本地使用(随机)SF 分配的端口:

完全省略ServiceManifest.xml中的端点配置,并且不要将端点名称传递给KestrelCommunicationListener构造函数

接下来,使用(例如内置的)反向代理与您的服务进行通信。

更多信息在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM