加入 Fabric 监视中心(预览版)
监视中心是一个集中式监视中心,专为 Fabric 用户设计,用于跟踪项后台作业。 有关监视中心的详细信息,请参阅使用监视中心。
后端
步骤 1 - 在项目清单内定义 JobScheduler
属性
要启用作业支持,该项目必须指定它支持的作业类型。 将 JobScheduler
属性添加到项目清单。 JobScheduler
为您的项目启用 Fabric 管理的作业。 下面是受支持的 JobScheduler
定义属性的概述:
properties | 说明 | 可能的值 |
---|---|---|
OnDemandJobDeduplicateOptions | 设置按需项目作业的删除重复选项。 | - None:不对作用进行重复删除。 - PerItem:确保只有一个活动作业针对同一项和作业类型运行。 - PerUser:确保对于相同的用户和项目,只有一个活动作业运行。 |
ScheduledJobDeduplicateOptions | 设置按需项目作业的删除重复选项。 | - None:不对作用进行重复删除。 - PerItem:确保只有一个活动作业针对同一项和作业类型运行。 - PerUser:确保对于相同的用户和项目,只有一个活动作业运行。 |
ItemJobTypes | 具有指定属性的作业类型列表。 | - Name:作业类型的名称,由可完全由 ISV 自定义。 |
步骤 2:实现作业工作负荷 API
若要与作业集成,工作负荷必须实现 Swagger 规范中定义的作业 API。
有三个与作业相关的 API:
1.启动作业实例
终结点: POST /workspaces/{workspaceId}/items/{itemType}/{itemId}/jobTypes/{jobType}/instances/{jobInstanceId}
调用此 API 以启动作业的执行。
- 响应:API 应返回“
202 Accepted
”状态,表明系统已成功计划该作业。
2.获取作业实例状态
终结点: GET /workspaces/{workspaceId}/items/{itemType}/{itemId}/jobTypes/{jobType}/instances/{jobInstanceId}
Fabric 使用轮询机制来跟踪作业实例状态。 在作业实例进行过程中,每分钟都会调用此 API 来检查其状态。 一旦作业完成,无论是成功还是失败,轮询都会停止。
响应:API 应返回“
200 OK
”状态以及当前作业实例状态。 如果作业已失败,则响应应包括作业状态、开始和结束时间以及错误详细信息。支持的作业状态:
NotStarted
InProgress
Completed
Failed
Cancelled
重要提示:即使作业已失败,此 API 仍应返回“
200 OK
”状态和“Failed
”作业状态。
3.取消作业实例
终结点: POST /workspaces/{workspaceId}/items/{itemType}/{itemId}/jobTypes/{jobType}/instances/{jobInstanceId}/cancel
调用此 API 以取消正在进行的作业实例。
- 响应:API 应返回“
200 OK
”状态以及当前作业实例状态。 如果作业已失败,则响应应包括作业状态、开始和结束时间以及错误详细信息。
其他信息
作业死信计数:如果作业未在 2 小时内开始,Fabric 平台就会将该作业标记为“死信”。
示例实现
有关这些 API 的示例实现,请参阅 Microsoft Fabric 工作负荷开发示例存储库中的 JobsControllerImpl.cs
。
前端
如何在 Fabric UI 中运行作业
将作业集成到后端中的项后,用户即可开始运行作业。 可通过两种方法在 Fabric 中运行作业:
- 无人参与的计划作业:由用户定义,使用共享 Fabric 计划程序体验定期运行。
- 按需将工作负载 UI 与扩展客户端 SDK 结合使用:
UI 中的 Fabric 计划程序体验
入口点:
上下文菜单 -> 计划
- 使用
workloadClient.itemSettings.open
,其中所选设置 ID 为“计划”。
- 使用
Layout
- 上次成功刷新时间和下一次刷新时间
- 刷新按钮
- 项目计划设置
载入
步骤 1:添加计划上下文菜单项
为了在项目上下文菜单中显示计划按钮,需要在项目前端清单的“contextMenuItems”属性中添加一个新条目:
{
"name": "schedule"
}
步骤 2:添加项目计划设置
向前端清单中的项目设置属性添加新的“计划”项目。
"schedule": {
"itemJobType": "ScheduledJob",
"refreshType": "Refresh"
}
itemJobType
:项目作业定义 XML 文件中定义的项目作业类型。refreshType
:指定刷新按钮的显示。 有三种类型:使用“刷新”和“运行”以启用刷新按钮和显示名称,将“None”设置为禁用刷新按钮。
作业 JavaScript API
除了无人参与的计划作业之外,工作负载还可以按需运行作业,甚至可以按需启动计划作业。 我们提供了一组 API 作为扩展客户端的一部分:
计划作业 API:
getItemScheduledJobs(objectId: string): Promise<ItemSchedule>
createItemScheduledJobs(createItemScheduledJobs: CreateItemScheduleParams): Promise<ItemSchedule>
updateItemScheduledJobs(updateItemScheduleParams: UpdateItemScheduleParams): Promise<ItemSchedule>
特定作业实例 API:
runItemJob(jobParams: RunItemJobParams): Promise<ItemJobInstance>
cancelItemJob(jobParams: CancelItemJobParams): Promise<CancelItemJobResult>
getItemJobHistory(getHistoryParams: GetItemJobHistoryParams): Promise<ItemJobHistory>
注意
getItemJobHistory
返回具有当前存储在 Fabric 中的状态的作业。 由于我们当前只依赖于轮询,请注意,状态可能不是最新的。 如果需要 UI 尽快反映最准确的状态,我们建议直接从后端获取状态。
与监视中心集成
数据准备就绪后,项目作业会自动显示在监视中心。 下一步是将项目类型添加到筛选器窗格,然后配置并实现用户可以针对作业执行的可用操作。
在监视中心筛选器窗格中启用项目
要将项目添加到筛选器窗格,请在项目前端清单中定义一个新属性:“supportedInMonitoringHub:true”。
与作业集成快速操作
用户可以对作业执行一组操作,例如取消、重试和获取详细信息。
工作负载团队会通过在项目前端清单中设置 itemJobConfig
属性来决定要启用哪些属性。 如果未设置,则图标将不可见。
例如,我们添加到支持所有作业操作的示例项目的配置如下所示。
当用户选择示例项目作业的取消图标时,我们将使用扩展“Fabric.WorkloadSample”的作业相关上下文调用提供的操作“item.job.cancel”,该操作由工作负载实施以实际取消作业。
Fabric 平台还要求此操作作出响应,以通知用户结果。
"itemJobActionConfig": {
"registeredActions": {
"detail": {
"extensionName": "Fabric.WorkloadSample",
"action": "item.job.detail"
},
"cancel": {
"extensionName": "Fabric.WorkloadSample",
"action": "item.job.cancel"
},
"retry": {
"extensionName": "Fabric.WorkloadSample",
"action": "item.job.retry"
}
}
}
“作业详细信息”窗格
当工作负载团队注册操作以获取详细信息时,Fabric 需要工作负荷操作以特定格式返回数据,以便 Fabric 可以在侧面板中显示该信息。
目前,支持纯文本或超链接中的键值对。
- 有关处理作业操作的示例,请参阅可以在示例存储库中找到的 index.worker.ts,并搜索以“item.job”开头的操作。
最近的运行
除了在监视中心查看作业之外,Fabric 还提供共享用户体验来显示特定项目的最近运行次数。
入口点:
“上下文”菜单>“最近运行次数”
使用
workloadClient.itemRecentRuns.open
。
载入
步骤 1:添加 recentRuns
上下文菜单项
为了在项目菜单中显示“最近运行次数”按钮,请在项目前端清单中的“contextMenuItems”属性中添加一个新条目,如下所示:
{
"name": "recentruns"
}
步骤 2:添加项目 recentRun
计划设置
向前端清单中的项目设置属性添加新的 recentRun
条目。
"recentRun": {
"useRecentRunsComponent": true,
}
示例项目功能区中的作业集成
作为 UI 工作负载示例的一部分,我们在专用于作业的项目功能区中增加了一个部分。
有关此功能区实现方式的示例,请参阅可以在示例存储库中找到的 ItemTabToolbar.tsx。