azure-service-fabric - 将自定义元数据嵌入 Service Fabric 应用程序/服务

标签 azure-service-fabric

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

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

最佳答案

您获得的主要“元数据”是服务/应用程序实例名称。这就是我在另一篇 post 中谈到的内容。工作方式是创建每个服务/应用程序实例,其名称包含客户端在解析它们时可以使用的一些信息。然后,客户端可以在 Service Fabric 中查询指定的应用程序/服务实例并连接到特定实例。服务/应用程序实例名称是 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.

现在客户端可以查询 Service Fabric 以发现可用的服务:

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 )还有更多内容,但这就是总体思路。

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

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

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

enter image description here

关于azure-service-fabric - 将自定义元数据嵌入 Service Fabric 应用程序/服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37693801/

相关文章:

c# - 在 Service Fabric 中使用可靠队列而不进行轮询?

visual-studio - 如何从 Visual Studio 将应用程序的多个实例发布到 Service Fabric 群集?

带有 SignalR 的 Azure Service Fabric WebAPI

c# - 根据服务总线队列大小缩放 Service Fabric

azure - kubernetes 中的子网

list - 可靠集合上的用户-帖子-评论关系实现

azure - Service Fabric 状态可以跨分区和/或集群复制吗?

asp.net-mvc - Service fabric 上的 https 请求返回 "Can’ t 安全连接到此页面”

visual-studio - 无法在 Visual Studio 2017 中调试 .NET 核心项目

azure-service-fabric - FabActUtil.exe 退出,代码为 -1