2016-06-08 56 views
2

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

我在看以下post和答案暗示这种可能性,但没有具体细节如何实现结果。

+0

当你使用元数据查询说应用/服务,你的意思是让客户来搜索基于元数据提供特定服务?你有没有一个你想要做什么的具体例子? –

+0

正确。在我引用的文章中,您提到了fabric:// app/service/property uri,我不确定如何获得这个结果以及什么是“属性”值。例如:可能有多个属于逻辑“环境”的应用程序。如果需要查询所有这些服务,我将如何处理它并不明确。这就是为什么我在考虑自定义元数据。 –

+0

@VaclavTurecek是你想澄清的吗? –

回答

2

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

继续使用音频/视频示例:让我们扩展该示例,以便我们有一个应用程序可以针对音频或视频的特定媒体格式执行特定任务。任务+媒体格式的每个组合是一个独特的命名服务实例,导致部署,看起来是这样的:

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(); 

还有更多一点地址解析部分(see here),但这是一般的想法。

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

更新:应用实例参数更多信息:

当你create a new application instance可以在application description提供一组键 - 值对。然后,当您query Service Fabric for application instances时,您将返回具有上述参数的Application结果对象的列表。这也在Visual Studio中显示,在您的应用程序项目中,您具有特定于环境的应用程序参数文件。 Visual Studio会从XML文件中提取这些键值对,并在创建应用程序实例时将它们用于应用程序描述中。

enter image description here

+0

了不起的信息,非常感谢。您能否指出哪里可以找到关于键/值对和查询的信息?那种情况正是我可能最终要做的。 –

+0

没问题,更新我的答案,更多关于应用程序参数的信息。 –

+0

令人惊叹!感谢您的详细信息。尤其是提到代码和清单方法。 –

相关问题