我正在使用C#在Service Fabric上实现GRPC。 GRPC服务器需要ServerPort(负责将ssl凭证绑定到端口)和服务定义(负责在路径上映射请求到方法委托)。我做了一个通信监听器,它报告分区和副本ID以及FQDN:端口。这允许客户端正确地确保其与正确的分区/副本进行通信。我在服务mainifest中声明了一个Endpoint资源,并将端口留空,表示我希望service fabric分配一个随机端口。我在本地开发中遇到的问题(我还没有把它推到天蓝色的集群中)是复制品似乎死了,因为它们被分配了相同的端口。我还应该注意,我告诉听众听二级副本。
我的问题是:
答案 0 :(得分:1)
Service Fabric保留应用程序端口范围,该范围在群集设置中定义(如果您在Azure中托管,则在资源管理器模板中)。当您将端口空白留在端点资源中时,SF将从此范围中选择尚未分配给计算机上其他服务的端口。
需要注意的重要一点是,端口分配是每个主机进程,默认的host process mode是共享主机进程,其中的副本是相同的服务类型可以共享主机进程。在这种情况下,同一主机进程中的副本将获得相同的端口。
有几种方法可以解决这个问题: