gpt4 book ai didi

azure-service-fabric - 如何通过API管理动态发现服务结构中托管的服务?

转载 作者:行者123 更新时间:2023-12-04 04:58:52 25 4
gpt4 key购买 nike

  • 可以说我在服务结构集群中托管了服务A和B。他们分别在端口7001和7002上监听(在群集内部)。
  • 让我们配置服务结构负载平衡器以监听端口8001并将请求转发到服务A的端口7001(群集内),并监听端口8002并将请求转发到端口7002(群集内的)服务。 B.
  • 可以说,我为服务A和B配置了API管理,并将请求路由到负载均衡器上的适当端口。
  • 这一切正常。
  • 现在,我不想为每个服务手动映射URL路由,而是要动态发现服务结构中托管的服务(来自API管理),并在运行时动态路由请求。
  • 为此,我知道我必须编写一个策略(最有可能使用C#)从某个地方查找此信息。
  • 但是我不确定要查询什么来查找服务矩阵群集中托管的负载平衡端口和服务。
  • 我想在同一服务结构集群中创建另一个服务C,并使用它(来自API管理)来提供集群的内部信息。
  • 但是我无法找到一种方法来查找本地服务端口信息或负载平衡的服务端口信息。

  • 我该怎么办?

    最佳答案

    这是一种发现群集中运行的服务和端点的方法。 (请记住,您也需要监视更改。)

    private static void ListEndpoints()
    {
    var resolver = ServicePartitionResolver.GetDefault();
    var fabricClient = new FabricClient();
    var apps = fabricClient.QueryManager.GetApplicationListAsync().Result;
    foreach (var app in apps)
    {
    Console.WriteLine($"Discovered application:'{app.ApplicationName}");

    var services = fabricClient.QueryManager.GetServiceListAsync(app.ApplicationName).Result;
    foreach (var service in services)
    {
    Console.WriteLine($"Discovered Service:'{service.ServiceName}");

    var partitions = fabricClient.QueryManager.GetPartitionListAsync(service.ServiceName).Result;
    foreach (var partition in partitions)
    {
    Console.WriteLine($"Discovered Service Partition:'{partition.PartitionInformation.Kind} {partition.PartitionInformation.Id}");


    ServicePartitionKey key;
    switch (partition.PartitionInformation.Kind)
    {
    case ServicePartitionKind.Singleton:
    key = ServicePartitionKey.Singleton;
    break;
    case ServicePartitionKind.Int64Range:
    var longKey = (Int64RangePartitionInformation)partition.PartitionInformation;
    key = new ServicePartitionKey(longKey.LowKey);
    break;
    case ServicePartitionKind.Named:
    var namedKey = (NamedPartitionInformation)partition.PartitionInformation;
    key = new ServicePartitionKey(namedKey.Name);
    break;
    default:
    throw new ArgumentOutOfRangeException("partition.PartitionInformation.Kind");
    }
    var resolved = resolver.ResolveAsync(service.ServiceName, key, CancellationToken.None).Result;
    foreach (var endpoint in resolved.Endpoints)
    {
    Console.WriteLine($"Discovered Service Endpoint:'{endpoint.Address}");
    }
    }
    }
    }
    }

    您可以使用PowerShell与负载均衡器进行通信:
    Get-AzureRmLoadBalancer

    最后,您需要提出一种将负载均衡器后端端口与服务端点自己匹配的方法。

    关于azure-service-fabric - 如何通过API管理动态发现服务结构中托管的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38518214/

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