3.4. 在 Kamelet Binding 中将 Knative 目标连接到数据 sink

要将 Knative 目标连接到数据接收器,您可以创建一个 Kamelet Binding,如图 3.3 所示

Connecting a Knative destination to a data sink

图 3.3 将 Knative 目标连接到数据接收器

Knative 目的地可以是 Knative 频道或 Knative 代理。

当您从频道发送数据时,该频道只有一个事件类型。您不需要在 Kamelet Binding 中为频道指定任何属性值。

当您从代理发送数据时,因为代理可以处理多个事件类型,所以您必须在 Kamelet Binding 中引用代理时为 type 属性指定一个值。

先决条件

  • 您知道 Knative 频道的名称和类型,或者您要从中接收事件的代理名称。对于代理,您还知道要接收的事件类型。

    此流程中的示例使用名为 mychannel 的 InMemoryChannel 频道,或名为 mybroker 和 coffee 事件(用于类型属性)的代理。这些是相同的示例目的地,用于接收从 Kamelet Binding 中数据源连接到 Knative 频道 的事件。

  • 您知道,您想要添加到 Camel 集成和所需的实例参数中的 Kamelet。

    此流程中的 Kamelet 示例是 Kamelet Catalog 中提供的 log-sink Kamelet,对于测试和调试非常有用。指定的 showStreams 参数来显示数据的消息正文。

流程

要将 Knative 频道连接到数据接收器,请创建一个 Kamelet Binding:

  1. 在您选择的编辑器中,创建一个具有以下基本结构的 YAML 文件:

    apiVersion: camel.apache.org/v1alpha1
    kind: KameletBinding
    metadata:
      name:
    spec:
      source:
      sink:
  2. 为 Kamelet Binding 添加一个名称。在本例中,名称是 knative-to-log,因为绑定将 Knative 目的地连接到 log-sink Kamelet。

    apiVersion: camel.apache.org/v1alpha1
    kind: KameletBinding
    metadata:
      name: knative-to-log
    spec:
      source:
      sink:
  3. 对于 Kamelet Binding 的源,请指定 Knative 频道或代理以及所需参数。

    本例将 Knative 频道指定为源:

    apiVersion: camel.apache.org/v1alpha1
    kind: KameletBinding
    metadata:
      name: knative-to-log
    spec:
      source:
        ref:
          apiVersion: messaging.knative.dev/v1
          kind: InMemoryChannel
          name: mychannel
      sink:

    本例将 Knative 代理指定为源:

    apiVersion: camel.apache.org/v1alpha1
    kind: KameletBinding
    metadata:
      name: knative-to-log
    spec:
      source:
        ref:
          kind: Broker
          apiVersion: eventing.knative.dev/v1
          name: default
        properties:
          type: coffee
    sink:
  4. 对于 Kamelet Binding 的 sink,请指定数据使用者 Kamelet(例如,log-sink Kamelet)并为 Kamelet 配置任何参数:

    apiVersion: camel.apache.org/v1alpha1
    kind: KameletBinding
    metadata:
      name: knative-to-log
    spec:
      source:
        ref:
          apiVersion: messaging.knative.dev/v1
          kind: InMemoryChannel
          name: mychannel
      sink:
        ref:
          apiVersion: camel.apache.org/v1alpha1
          kind: Kamelet
          name: log-sink
        properties:
          showStreams: true
  5. 保存 YAML 文件(如 knative-to-log.yaml)。
  6. 登录您的 OpenShift 项目。
  7. 将 Kamelet Binding 作为资源添加到 OpenShift 命名空间: oc apply -f <kamelet binding filename>

    例如:

    oc apply -f knative-to-log.yaml

    Camel K operator 使用 KameletBinding 资源生成并运行 Camel K 集成。构建可能需要几分钟时间。

  8. 查看 KameletBinding 的状态:

    oc get kameletbindings

  9. 查看集成的状态:

    oc get integrations

  10. 查看集成的日志:

    kamel logs <integration> -n <project>

    例如:

    kamel logs knative-to-log -n my-camel-knative

    在输出中,您应该看到 coffee 事件,例如:

    [1] INFO [sink] (vert.x-worker-thread-1) {"id":254,"uid":"8e180ef7-8924-4fc7-ab81-d6058618cc42","blend_name":"Good-morning Star","origin":"Santander, Colombia","variety":"Kaffa","notes":"delicate, creamy, lemongrass, granola, soil","intensifier":"sharp"}
    [1] INFO [sink] (vert.x-worker-thread-2) {"id":8169,"uid":"3733c3a5-4ad9-43a3-9acc-d4cd43de6f3d","blend_name":"Caf? Java","origin":"Nayarit, Mexico","variety":"Red Bourbon","notes":"unbalanced, full, granola, bittersweet chocolate, nougat","intensifier":"delicate"}
  11. 要停止正在运行的集成,请删除相关的 Kamelet Binding 资源:

    oc delete kameletbindings/<kameletbinding-name>

    例如:

    oc delete kameletbindings/knative-to-log