使用ServicePartitionClient

时间:2016-11-11 00:08:45

标签: azure-service-fabric

我正在服务结构集群上实现API网关,其中API网关服务是将外部HTTP请求路由到集群中运行的一组工作服务的公共端点。对于网关和内部服务之间的服务间通信,我们使用的是ServicePartitionClient。

我发现当使用ServicePartitionClient解析服务地址并与无状态服务进行通信时,它将选择无状态服务的单个实例,并且仅在每次通信尝试时与该实例通信。在我的情况下,我有多个无状态服务实例正在运行,并希望在它们之间分配负载(例如循环)。有没有办法使用ServicePartitionClient,每次都不需要命中NamingService服务(这对我们的用例来说太贵了)?

1 个答案:

答案 0 :(得分:3)

为每个请求创建一个新的ServicePartitionClient实例。

ServicePartitionClient是一种相对轻量级的数据结构,只保存有关通信通道的一些元数据。实际的连接管理,池化和解析名称缓存发生在下面的层中:

  • FabricClient缓存已解析的端点,因此每次请求端点时都不会点击命名服务。
  • ServicePartitionResolver根据我们所知道的常见连接异常,使用基本的重试循环包装FabricClient。
  • CommunicationClientFactoryBase,如果您正在使用它,则为您保留ServicePartitionResolver实例并缓存连接。

因此,请确保重用您的CommunicationClientFactory。如果您使用的是CommunicationClientFactoryBase并且您没有传入自己的ServicePartitionResolver,则默认使用单例。