簡體   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