×

数据索引服务是一个专用的支持服务,用于存储与工作流实例及其关联作业相关的数据。此服务提供一个 GraphQL 端点,允许用户查询该数据。

数据索引服务处理通过事件接收的数据,这些事件可能源于任何工作流或直接来自作业服务。

数据索引服务支持 Apache Kafka 或 Knative Eventing 以使用来自工作流的 CloudEvents 消息。它会索引并将这些事件数据存储在数据库中,使其可以通过 GraphQL 访问。这些事件提供了有关工作流执行的详细信息。数据索引服务对于 OpenShift Serverless Logic 的搜索、洞察和管理功能至关重要。

数据索引服务的主要功能如下:

  • 灵活的数据结构

  • 可分布式、云就绪的格式

  • 通过 Apache Kafka、Knative 和 CloudEvents 与工作流进行基于消息的通信

  • 强大的基于 GraphQL 的查询 API

当您使用 OpenShift Serverless Operator 部署工作流时,无需手动安装或配置数据索引服务。Operator 会自动管理每个工作流与之连接所需的所有必要配置。

工作流实例和作业的 GraphQL 查询

要检索有关工作流实例和作业的数据,可以使用 GraphQL 查询。

从工作流实例检索数据

您可以使用以下查询示例检索有关特定工作流实例的信息:

{
  ProcessInstances {
    id
    processId
    state
    parentProcessInstanceId
    rootProcessId
    rootProcessInstanceId
    variables
    nodes {
      id
      name
      type
    }
  }
}

从作业检索数据

您可以使用以下查询示例从特定作业实例检索数据:

{
  Jobs {
    id
    status
    priority
    processId
    processInstanceId
    executionCounter
  }
}

使用 where 参数过滤查询结果

您可以使用where参数过滤查询结果,允许基于工作流属性进行多种组合。

按状态过滤的示例查询:
{
  ProcessInstances(where: {state: {equal: ACTIVE}}) {
    id
    processId
    processName
    start
    state
    variables
  }
}
按 ID 过滤的示例查询:
{
  ProcessInstances(where: {id: {equal: "d43a56b6-fb11-4066-b689-d70386b9a375"}}) {
    id
    processId
    processName
    start
    state
    variables
  }
}

默认情况下,过滤器使用 AND 运算符组合。您可以通过使用 AND 或 OR 运算符组合过滤器来修改此行为。

使用 OR 运算符组合过滤器的示例查询:
{
  ProcessInstances(where: {or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}) {
    id
    processId
    processName
    start
    end
    state
  }
}
使用 AND 和 OR 运算符组合过滤器的示例查询:
{
  ProcessInstances(where: {and: {processId: {equal: "travels"}, or: {state: {equal: ACTIVE}, rootProcessId: {isNull: false}}}}) {
    id
    processId
    processName
    start
    end
    state
  }
}

根据属性类型,您可以使用以下可用的运算符:

属性类型 可用运算符

字符串数组

  • contains: 字符串

  • containsAll: 字符串数组

  • containsAny: 字符串数组

  • isNull: 布尔值(true 或 false)

字符串

  • in: 字符串数组

  • like: 字符串

  • isNull: 布尔值(true 或 false)

  • equal: 字符串

ID

  • in: 字符串数组

  • isNull: 布尔值(true 或 false)

  • equal: 字符串

布尔值

  • isNull: 布尔值(true 或 false)

  • equal: 布尔值(true 或 false)

数值

  • in: 整数数组

  • isNull: 布尔值

  • equal: 整数

  • greaterThan: 整数

  • greaterThanEqual: 整数

  • lessThan: 整数

  • lessThanEqual: 整数

  • between: 数值范围

  • from: 整数

  • to: 整数

日期

  • isNull: 布尔值(true 或 false)

  • equal: 日期时间

  • greaterThan: 日期时间

  • greaterThanEqual: 日期时间

  • lessThan: 日期时间

  • lessThanEqual: 日期时间

  • between: 日期范围

  • from: 日期时间

  • to: 日期时间

使用 orderBy 参数排序查询结果

您可以使用orderBy参数根据工作流属性对查询结果进行排序。您还可以指定升序 (ASC) 或降序 (DESC) 的排序方向。多个属性将按照您指定的顺序应用。

按升序 (ASC) 的开始时间排序的示例查询:
{
  ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}) {
    id
    processId
    processName
    start
    end
    state
  }
}

使用分页参数限制结果数量

您可以使用pagination参数控制返回的结果数量并指定偏移量。

限制结果为10条,从偏移量0开始的示例查询
{
  ProcessInstances(where: {state: {equal: ACTIVE}}, orderBy: {start: ASC}, pagination: {limit: 10, offset: 0}) {
    id
    processId
    processName
    start
    end
    state
  }
}