跳到内容

订阅

创建完 Channel 和 Sink 后,您可以创建一个 Subscription 来启用事件传递。

Subscription 由 Subscription 对象组成,该对象指定了要传递事件的 Channel 和 Sink(也称为 Subscriber)。您还可以指定一些特定于 Sink 的选项,例如如何处理失败。

有关 Subscription 对象的更多信息,请参阅 Subscription

创建订阅

通过运行以下命令在 Channel 和 Sink 之间创建 Subscription:

kn subscription create <subscription-name> \
  --channel <Group:Version:Kind>:<channel-name> \
  --sink <sink-prefix>:<sink-name> \
  --sink-reply <sink-prefix>:<sink-name> \
  --sink-dead-letter <sink-prefix>:<sink-name>
  • --channel 指定应处理的云事件的源。您必须提供 Channel 名称。如果您不使用由 Channel 资源支持的默认 Channel,则必须为指定的 Channel 类型加上 <Group:Version:Kind> 前缀。例如,对于 Kafka 驱动的 Channel,这是 messaging.knative.dev:v1beta1:KafkaChannel

  • --sink 指定应将事件传递到的目标目的地。默认情况下,<sink-name> 被解释为同名 Knative 服务,位于 Subscription 的相同命名空间中。您可以使用以下前缀之一来指定 Sink 的类型:

    • ksvc:Knative 服务。
    • svc:Kubernetes 服务。
    • channel:将用作目的地的 Channel。此处只能引用默认的 Channel 类型。
    • broker:事件代理。
    • --sink-reply 是一个可选参数,可用于指定 Sink 回复的发送位置。它使用与 --sink 标志相同的命名约定来指定 Sink。
    • --sink-dead-letter 是一个可选参数,可用于指定发生故障时发送 CloudEvent 的位置。它使用与 --sink 标志相同的命名约定来指定 Sink。

      • ksvc:Knative 服务。
      • svc:Kubernetes 服务。
      • channel:将用作目的地的 Channel。此处只能引用默认的 Channel 类型。
      • broker:事件代理。
    • --sink-reply--sink-dead-letter 是可选参数。它们分别用于指定 Sink 回复的发送位置以及发生故障时发送 CloudEvent 的位置。两者都使用与 --sink 标志相同的命名约定来指定 Sink。

此示例命令创建一个名为 mysubscription 的 Subscription,该 Subscription 将事件从名为 mychannel 的 Channel 路由到一个名为 myservice 的 Knative 服务。

注意

Sink 前缀是可选的。您还可以仅将 --sink 指定为 --sink <service-name>,并省略 ksvc 前缀。

  1. 使用以下示例创建一个 Subscription 对象的 YAML 文件

    apiVersion: messaging.knative.dev/v1
    kind: Subscription
    metadata:
      name: <subscription-name>
      # Name of the Subscription.
      namespace: default
    spec:
      channel:
        apiVersion: messaging.knative.dev/v1
        kind: Channel
        name: <channel-name>
        # Name of the Channel that the Subscription connects to.
      delivery:
        # Optional delivery configuration settings for events.
        deadLetterSink:
        # When this is configured, events that failed to be consumed are sent to the deadLetterSink.
        # The event is dropped, no re-delivery of the event is attempted, and an error is logged in the system.
        # The deadLetterSink value must be a Destination.
          ref:
            apiVersion: serving.knative.dev/v1
            kind: Service
            name: <service-name>
      reply:
        # Optional configuration settings for the reply event.
        # This is the event Sink that events replied from the subscriber are delivered to.
        ref:
          apiVersion: messaging.knative.dev/v1
          kind: InMemoryChannel
          name: <service-name>
      subscriber:
        # Required configuration settings for the Subscriber. This is the event Sink that events are delivered to from the Channel.
        ref:
          apiVersion: serving.knative.dev/v1
          kind: Service
          name: <service-name>
    
  2. 通过运行命令应用 YAML 文件

    kubectl apply -f <filename>.yaml
    
    其中 <filename> 是您在上一步中创建的文件的名称。

列出订阅

您可以使用 kn CLI 工具列出所有现有的 Subscription。

  • 列出所有订阅

    kn subscription list
    
  • 以 YAML 格式列出订阅

    kn subscription list -o yaml
    

描述订阅

您可以使用 kn CLI 工具打印有关 Subscription 的详细信息

kn subscription describe <subscription-name>

示例

kn subscription describe mysubscription

预期输出

Name:            mysubscription
Namespace:       default
Annotations:     messaging.knative.dev/creator=user@example.com
                 messaging.knative.dev/lastModifier=user@example.com
Age:             1h
Channel:         Channel:mychannel (messaging.knative.dev/v1)
Subscriber:
  URI:           http://myservice.default.svc.cluster.local
Reply:
  Name:          myreply
  Kind:          InMemoryChannel
  API Version:   messaging.knative.dev/v1
DeadLetterSink:
  Name:          mydlq
  Kind:          Service
  API Version:   serving.knative.dev/v1

Conditions:
  OK TYPE                  AGE REASON
  ++ Ready                  1h
  ++ AddedToChannel         1h
  ++ ChannelReady           1h

更新订阅

您可以使用 kn CLI 工具或应用更新后的 YAML 文件来更新现有的 Subscription。

使用 kn subscription update 命令修改现有 Subscription。

示例

kn subscription update mysubscription \
  --sink ksvc:myservice \
  --sink-dead-letter ksvc:error-handler \
  --sink-reply channel:reply-channel

您可以根据需要更新单个参数:- --sink:更改订阅者(事件的目的地)- --sink-dead-letter:添加或更新失败传递的死信 Sink- --sink-reply:更新回复事件的发送位置

注意

更新 Subscription 时,必须提供要保留的所有配置参数。更新命令中未指定的任何参数将使用默认值。

  1. 获取当前 Subscription 配置

    kubectl get subscription <subscription-name> -o yaml > subscription.yaml
    
  2. 编辑 YAML 文件以对 spec 部分进行所需的更改。

  3. 应用更新后的 YAML 文件

    kubectl apply -f subscription.yaml
    

删除订阅

您可以使用 knkubectl CLI 工具删除 Subscription。

kn subscription delete <subscription-name>
kubectl subscription delete <subscription-name>

后续步骤

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。