我什么时候应该使用 ServiceFabricIntegrationOptions.UseUniqueServiceUrl

Mar*_*oxx 0 c# azure azure-service-fabric asp.net-core

似乎表明这始终是必要的,否则您可能会解决不正确的服务 - 因为不能保证服务不会移动等等......

默认的asp.net core服务模板使用 UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)

是否有一个原因?什么时候可以不使用ServiceFabricIntegration中间件?


E:我看到这些实际上是一个标志枚举。因此,您可能应该始终使用 UseUniqueServiceUrl https://github.com/Azure/service-fabric-aspnetcore/blob/develop/src/Microsoft.ServiceFabric.AspNetCore/WebHostBuilderServiceFabricExtension.cs

Pet*_*ons 5

恕我直言,我认为您没有充分阅读这些文档。这里解释得很好:

使用动态分配端口的服务应该使用此中间件。

使用固定唯一端口的服务在协作环境中不存在此问题。固定的唯一端口通常用于面向外部的服务,这些服务需要一个众所周知的端口供客户端应用程序连接。例如,大多数面向 Internet 的 Web 应用程序将使用端口 80 或 443 进行 Web 浏览器连接。在这种情况下,不应启用唯一标识符。

总结一下:使用 Kestrel 或 WebListener 时可以选择使用动态端口或固定端口。请参阅上述链接中的使用 WebListener/Kestrel 和静态端口部分以及使用 WebListener/Kestrel 和动态端口部分。当您选择使用动态端口时ServiceFabricIntegrationOptions.UseUniqueServiceUrl,请使用 ,否则使用ServiceFabricIntegrationOptions.None作为中间件的参数。

现在,至于为什么在动态端口的情况下需要这个独特的服务 url 中间件,有一个场景描述了可能的问题:

如果服务使用动态分配的应用程序端口,则服务副本可能会同时使用先前位于同一物理或虚拟机上的另一个服务的相同 IP:port 端点。这可能会导致客户端错误地连接到错误的服务。如果发生以下事件序列,则可能会发生这种情况:

  • 服务 A 通过 HTTP 侦听 10.0.0.1:30000。
  • 客户端解析服务A并获取地址10.0.0.1:30000
  • 服务 A 移动到不同的节点。
  • 服务 B 位于 10.0.0.1,并且巧合地使用相同的端口 30000。
  • 客户端尝试连接到缓存地址为 10.0.0.1:30000 的服务 A。
  • 客户端现在已成功连接到服务 B,但没有意识到它连接到了错误的服务。

这可能会随机导致难以诊断的错误