gpt4 book ai didi

c# - 多个 kestrel 无状态服务实例在服务结构中的不同端口上运行

转载 作者:行者123 更新时间:2023-12-03 01:00:26 26 4
gpt4 key购买 nike

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

在不进行任何更改的情况下运行天气预报应用程序工作正常,我可以看到该应用程序在 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”中: enter image description here

在 VS2019 中运行的应用程序中,诊断窗口显示进程持续无法启动:

enter image description here

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

enter image description here

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

最佳答案

Kestrel 不支持端口共享,因此一旦一项服务声明了该端口,同一台计算机(此处:您的开发计算机)上运行的其他服务就无法使用该端口。

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

Omit the Endpoint configuration in ServiceManifest.xml entirely, and don't pass an endpoint name to the KestrelCommunicationListener constructor

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

更多信息here

关于c# - 多个 kestrel 无状态服务实例在服务结构中的不同端口上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61314414/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com