6.6. 自定义功能


OpenShift Serverless Logic 支持自定义功能类型,它允许实现扩展功能定义功能。通过与 操作 字符串结合使用,您可以使用预定义的功能类型列表。

注意

自定义功能类型可能无法在其他运行时实现中可移植。

6.6.1. Sysout 自定义功能

您可以使用 sysout 功能进行日志记录,如下例所示:

sysout 功能定义示例

{
  "functions": [
    {
      "name": "logInfo",
      "type": "custom",
      "operation": "sysout:INFO"
    }
  ]
}

: 后面的字符串是可选的,用于指示日志级别。可能的值有 TRACE,DEBUG,INFO,WARN, 和 ERROR。如果值不存在,则 INFO 是默认值。

状态 定义中,您可以调用相同的 sysout 功能,如下例所示:

状态中的 sysout 功能引用示例

{
  "states": [
    {
      "name": "myState",
      "type": "operation",
      "actions": [
        {
          "name": "printAction",
          "functionRef": {
            "refName": "logInfo",
            "arguments": {
              "message": "\"Workflow model is \\(.)\""
            }
          }
        }
      ]
    }
  ]
}

在上例中,message 参数可以是 jq 表达式,也可以是使用 interpolation 的 jq 字符串。

6.6.2. Java 自定义功能

OpenShift Serverless Logic 支持 Apache Maven 项目中的 java 功能,在其中定义您的工作流服务。

以下示例显示了 java 函数的声明:

java 功能声明示例

{
  "functions": [
    {
      "name": "myFunction", 1
      "type": "custom", 2
      "operation": "service:java:com.acme.MyInterfaceOrClass::myMethod" 3
    }
  ]
}

1
myFunction 是功能名称。
2
custom 是功能类型。
3
service:java:com.acme.MyInterfaceOrClass::myMethod 是自定义操作定义。在自定义操作定义中,service 是 reserved 操作关键字,后跟 java 关键字。com.acme.MyInterfaceOrClass 是接口或实施类的 FQCN (完全限定域名),后跟方法名称 myMethod

6.6.3. Knative 自定义功能

OpenShift Serverless Logic 通过 knative-serving 附加组件提供自定义功能实现,以调用 Knative 服务。它允许您具有静态 URI,定义用于执行 HTTP 请求的 Knative 服务。URI 中定义的 Knative 服务在当前 Knative 集群中查询,并转换为有效的 URL。

以下示例使用部署的 Knative 服务:

$ kn service list
NAME                              URL                                                                      LATEST                                  AGE     CONDITIONS   READY   REASON
custom-function-knative-service   http://custom-function-knative-service.default.10.109.169.193.sslip.io   custom-function-knative-service-00001   3h16m   3 OK / 3     True

您可以使用 Knative 服务名称声明 OpenShift Serverless Logic 自定义功能,如下例所示:

  "functions": [
    {
      "name": "greet", 1
      "type": "custom", 2
      "operation": "knative:services.v1.serving.knative.dev/custom-function-knative-service?path=/plainJsonFunction", 3
    }
  ]
1
greet 是函数名称。
2
custom 是功能类型。
3
操作中,您可以设置 Knative 服务的协调。
注意

此功能发送 POST 请求。如果没有指定路径,OpenShift Serverless Logic 将使用根路径(/)。您还可以通过在操作中设置 method= GET 来发送 GET 请求。在这种情况下,参数通过查询字符串转发。

6.6.4. REST 自定义功能

OpenShift Serverless Logic 提供 REST 自定义类型作为快捷方式。在函数定义中使用自定义 rest 时,您可以指定要调用的 HTTP URI,以及要使用的 HTTP 方法(get、post、patch 或 put)。这可以通过使用 operation 字符串来完成。调用函数时,您可以使用 OpenAPI 功能传递请求参数。

以下示例显示了其他函数 的声明

  {
  "functions": [
    {
      "name": "multiplyAllByAndSum", 1
      "type": "custom", 2
      "operation": "rest:post:/numbers/{multiplier}/multiplyByAndSum" 3
    }
  ]
}
1
multiplyAllAndSum 是功能名称。
2
custom 是功能类型。
3
rest:post:/numbers/{multiplier}/multiplyByAndSum 是自定义操作定义。在自定义操作定义中,其余 是表示此为 REST 调用的 reserved 操作关键字,post 是 HTTP 方法,/numbers/{multiplier}/multiplyByAndSum 是相对端点。

在使用相对端点时,您必须将主机指定为属性。host 属性的格式是 kogito.sw.functions.<function_name>.host。在本例中,kogito.sw.functions.multiplyAllByAndSum.host 是 host 属性键。如果需要,您可以通过指定 kogito.sw.functions.multiplyAllAndSum.port 属性来覆盖默认端口(80)。

此端点充当正文,其字段 编号为 整数数组,将阵列中的每个项目乘以 倍数,并返回所有乘以项目的总和。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.