Azure service fabric 使用服务结构应用程序/服务嵌入自定义元数据

Azure service fabric 使用服务结构应用程序/服务嵌入自定义元数据,azure-service-fabric,Azure Service Fabric,我的目标是运行多个应用程序,并将一些元数据嵌入到应用程序/服务中,以便使用元数据查询应用程序/服务。这可能吗 我在看下面的内容,答案暗示了这种可能性,但没有关于如何实现结果的具体细节。您得到的主要“元数据”是服务/应用程序实例名称。这就是我在另一本书里说的。其工作方式是使用一个名称创建每个服务/应用程序实例,该名称包含客户端在解析它们时可以使用的一些信息。然后,客户机可以查询命名应用程序/服务实例的服务结构,并连接到特定实例。服务/应用程序实例名称是URI,因此您可以使用路径层次结构对信息进行分

我的目标是运行多个应用程序,并将一些元数据嵌入到应用程序/服务中,以便使用元数据查询应用程序/服务。这可能吗

我在看下面的内容,答案暗示了这种可能性,但没有关于如何实现结果的具体细节。

您得到的主要“元数据”是服务/应用程序实例名称。这就是我在另一本书里说的。其工作方式是使用一个名称创建每个服务/应用程序实例,该名称包含客户端在解析它们时可以使用的一些信息。然后,客户机可以查询命名应用程序/服务实例的服务结构,并连接到特定实例。服务/应用程序实例名称是URI,因此您可以使用路径层次结构对信息进行分类

继续音频/视频示例:让我们扩展该示例,这样我们就有了一个应用程序,可以为音频或视频的特定媒体格式执行特定任务。task+media format的每个组合都是一个唯一的命名服务实例,导致部署如下所示:

Application:
fabric:/avapp
  Services:
  fabric:/avapp/video/encoding/mp4
  fabric:/avapp/video/encoding/h264
  fabric:/avapp/video/captioning/english
  fabric:/avapp/video/captioning/czech
  fabric:/avapp/audio/encoding/aac
  fabric:/avapp/audio/encoding/mp3
  etc.
现在,客户端可以查询服务结构以发现可用的服务:

FabricClient fabricClient = new FabricClient();

System.Fabric.Query.ServiceList services = await fabricClient.QueryManager.GetServiceListAsync(new Uri("fabric:/avapp"));
然后,您可以简单地使用LINQ查询服务列表。例如,如果我想查看所有进行视频编码的服务:

services.Where(x => x.ServiceName.AbsolutePath.Contains("video/encoding"));
然后,您可以解析特定服务的地址以连接到该服务:

ServicePartitionResolver resolver = ServicePartitionResolver.GetDefault();
ResolvedServicePartition servicePartition = await resolver.ResolveAsync(new Uri("fabric:/avapp/video/encoding/h264"), new ServicePartitionKey(1), cancellationToken);
ResolvedServiceEndpoint endpoint = servicePartition.GetEndpoint();
地址解析部分()还有一些内容,但这只是一般的想法

应用程序实例还允许您设置自定义应用程序参数(键值对),这些参数可以在创建时为每个实例设置。它们不会显示在应用程序名称中,但当您向ServiceFabric请求正在运行的应用程序实例列表时,您会得到这些信息。当客户端需要决定连接到哪个应用程序时,它也可能被用作元数据

更新:有关应用程序实例参数的更多信息:

当您可以在中提供一组键值对时。然后,当您返回一个包含上述参数的结果对象列表时。这也显示在VisualStudio中的应用程序项目中,其中有特定于环境的应用程序参数文件。VisualStudio从XML文件中提取这些键值对,并在创建应用程序实例时在应用程序描述中使用它们


当您说使用元数据查询应用程序/服务时,您的意思是允许客户端基于可用元数据搜索特定服务吗?你有一个你想做什么的具体例子吗?正确。在我提到的帖子中,你提到了fabric://app/service/property uri和我不确定如何进行,以及“属性”值是什么。示例:可能有多个属于逻辑“环境”的应用程序。如果需要查询所有这些服务,我将如何进行还不清楚。这就是为什么我要考虑自定义元数据。@VaclavTurecek这就是您想要澄清的吗?是的,这很有帮助,谢谢!好消息,非常感谢。请指出键/值对和查询信息的位置好吗?那个场景正是我最终可能要做的。没问题,用更多关于应用程序参数的信息更新了我的答案。太棒了!谢谢你提供的详细信息。特别是提到代码和清单两种方法。一个重要的细节:ApplicationParameters只有在ApplicationPackageRoot中指定了默认值时才起作用:)