×

创建通道和事件接收器后,您可以创建订阅以启用事件传递。订阅是通过配置 `Subscription` 对象创建的,该对象指定通道和接收事件的接收器(也称为 *订阅者*)。

使用管理员视角创建订阅

创建通道和事件接收器(也称为 *订阅者*)后,您可以创建订阅以启用事件传递。订阅是通过配置 `Subscription` 对象创建的,该对象指定通道和将事件传递到的订阅者。您还可以指定一些特定于订阅者的选项,例如如何处理故障。

先决条件
  • OpenShift Serverless Operator 和 Knative Eventing 已安装在您的 OpenShift Container Platform 集群上。

  • 您已登录到 Web 控制台,并且处于 **管理员** 视角。

  • 您拥有 OpenShift Container Platform 的集群管理员权限,或者您拥有 Red Hat OpenShift Service on AWS 或 OpenShift Dedicated 的集群或专用管理员权限。

  • 您已创建 Knative 通道。

  • 您已创建用作订阅者的 Knative 服务。

步骤
  1. 在 OpenShift Container Platform Web 控制台的 **管理员** 视角中,导航到 **无服务器** → **事件**。

  2. 在**通道**选项卡中,选择目标通道的选项菜单kebab以添加订阅。

  3. 单击列表中的**添加订阅**。

  4. 在**添加订阅**对话框中,为订阅选择一个**订阅者**。订阅者是接收来自通道事件的Knative服务。

  5. 单击**添加**。

使用开发者视角创建订阅

创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用OpenShift Container Platform Web控制台提供了一个简化且直观的用户界面来创建订阅。

先决条件
  • OpenShift Serverless Operator、Knative Serving和Knative Eventing已安装在您的OpenShift Container Platform集群上。

  • 您已登录到Web控制台。

  • 您已创建事件接收器(例如Knative服务)和通道。

  • 您已创建项目或有权访问具有在OpenShift Container Platform中创建应用程序和其他工作负载的适当角色和权限的项目。

步骤
  1. 在**开发者**视角中,导航到**拓扑**页面。

  2. 使用以下任一方法创建订阅

    1. 将鼠标悬停在要为其创建订阅的通道上,然后拖动箭头。将显示**添加订阅**选项。

      Create a subscription for the channel
      1. 在**订阅者**列表中选择您的接收器。

      2. 单击**添加**。

    2. 如果服务在与通道相同的命名空间或项目下的**拓扑**视图中可用,请单击要为其创建订阅的通道,然后将箭头直接拖动到服务,即可立即从通道创建到该服务的订阅。

验证
  • 创建订阅后,您可以在**拓扑**视图中将其显示为连接通道和服务的线。

    Subscription in the Topology view

使用YAML创建订阅

创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用YAML文件创建Knative资源使用声明式API,使您可以声明性地且可重复地描述订阅。要使用YAML创建订阅,您必须创建一个定义Subscription对象的YAML文件,然后使用oc apply命令应用它。

先决条件
  • OpenShift Serverless Operator和Knative Eventing已安装在集群上。

  • 安装OpenShift CLI(oc)。

  • 您已创建项目或有权访问具有在OpenShift Container Platform中创建应用程序和其他工作负载的适当角色和权限的项目。

步骤
  • 创建Subscription对象

    • 创建一个YAML文件并将以下示例代码复制到其中

      apiVersion: messaging.knative.dev/v1
      kind: Subscription
      metadata:
        name: my-subscription (1)
        namespace: default
      spec:
        channel: (2)
          apiVersion: messaging.knative.dev/v1
          kind: Channel
          name: example-channel
        delivery: (3)
          deadLetterSink:
            ref:
              apiVersion: serving.knative.dev/v1
              kind: Service
              name: error-handler
        subscriber: (4)
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: event-display
      1 订阅的名称。
      2 订阅连接到的通道的配置设置。
      3 事件传递的配置设置。这告诉订阅无法传递给订阅者的事件会发生什么。配置此设置后,无法消费的事件将发送到deadLetterSink。事件将被丢弃,不会尝试重新传递事件,并且系统中会记录错误。deadLetterSink值必须是Destination
      4 订阅者的配置设置。这是从通道传递事件的事件接收器。
    • 应用YAML文件

      $ oc apply -f <filename>

使用Knative CLI创建订阅

创建通道和事件接收器后,您可以创建订阅以启用事件传递。使用Knative (kn) CLI创建订阅比直接修改YAML文件提供了更简化和直观的用户界面。您可以使用带有适当标志的kn subscription create命令来创建订阅。

先决条件
  • OpenShift Serverless Operator 和 Knative Eventing 已安装在您的 OpenShift Container Platform 集群上。

  • 您已安装Knative (kn) CLI。

  • 您已创建项目或有权访问具有在OpenShift Container Platform中创建应用程序和其他工作负载的适当角色和权限的项目。

步骤
  • 创建订阅以将接收器连接到通道

    $ kn subscription create <subscription_name> \
      --channel <group:version:kind>:<channel_name> \ (1)
      --sink <sink_prefix>:<sink_name> \ (2)
      --sink-dead-letter <sink_prefix>:<sink_name> (3)
    1 --channel指定应处理的云事件的源。您必须提供通道名称。如果您没有使用由Channel自定义资源支持的默认InMemoryChannel通道,则必须在通道名称前加上指定通道类型的<group:version:kind>。例如,对于Apache Kafka支持的通道,这将是messaging.knative.dev:v1beta1:KafkaChannel
    2 --sink指定应将事件传递到的目标目的地。默认情况下,<sink_name>被解释为此名称的Knative服务,位于与订阅相同的命名空间中。您可以使用以下前缀之一来指定接收器的类型
    ksvc

    Knative服务。

    channel

    用作目的地的通道。此处只能引用默认通道类型。

    broker

    事件代理。

    3 可选:--sink-dead-letter是一个可选标志,可用于指定在事件无法传递的情况下应将事件发送到的接收器。有关更多信息,请参阅OpenShift Serverless的*事件传递*文档。
    示例命令
    $ kn subscription create mysubscription --channel mychannel --sink ksvc:event-display
    示例输出
    Subscription 'mysubscription' created in namespace 'default'.
验证
  • 要确认通道是否通过订阅连接到事件接收器或*订阅者*,请列出现有订阅并检查输出

    $ kn subscription list
    示例输出
    NAME            CHANNEL             SUBSCRIBER           REPLY   DEAD LETTER SINK   READY   REASON
    mysubscription   Channel:mychannel   ksvc:event-display                              True
删除订阅
  • 删除订阅

    $ kn subscription delete <subscription_name>

后续步骤

  • 配置事件传递参数,这些参数在事件无法传递到事件接收器的情况下应用。