10.4. 使用触发器(trigger)

所有发送到某个频道或者代理的事件都会被发送到该频道的所有订阅者或者代理。

使用触发器可让您过滤频道或代理的事件,以便订阅者只根据您定义的标准接收到一小部分事件。

Knative CLI 提供了一组 kn trigger 命令,可用于创建和管理触发器。

10.4.1. 先决条件

在使用触发器前,您需要:

  • 安装了 Knative Eventing 和 kn
  • 有可用的代理,可以是 default 代理,也可以是您创建的代理。

    您可以按照 在 Knative Eventing 中使用代理中的内容,或在创建触发器时使用 --inject-broker 标志来创建 default 代理。以下介绍了使用标志的步骤。

  • 一个可用的事件消费者,例如 Knative 服务。

10.4.2. 使用 kn创建触发器

流程

运行以下命令来创建服务:

$ kn trigger create <TRIGGER-NAME> --broker <BROKER-NAME> --filter <KEY=VALUE> --sink <SINK>

要创建触发器并使用代理注入程序创建 default 代理,请输入以下命令:

$ kn trigger create <TRIGGER-NAME> --inject-broker --filter <KEY=VALUE> --sink <SINK>

触发器 YAML 示例:

apiVersion: eventing.knative.dev/v1alpha1
kind: Trigger
metadata:
  name: trigger-example 1
spec:
 broker: default 2
 subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: my-service 3

1
触发器的名称。
2
事件要在其中过滤的代理名称。如果没有指定代理,则触发器将使用 default 代理。
3
消费者过滤过的事件的服务名称。

10.4.3. 使用 kn列出触发器

Kn trigger list 命令输出可用触发器列表。

流程

  • 要输出可用触发器列表,请输入以下命令:

    $ kn trigger list

    输出示例:

    $ kn trigger list
    NAME    BROKER    SINK           AGE   CONDITIONS   READY   REASON
    email   default   svc:edisplay   4s    5 OK / 5     True
    ping    default   svc:edisplay   32s   5 OK / 5     True
  • 要以 JSON 格式输出触发器列表,请输入以下命令:

    $ kn trigger list -o json

10.4.4. 使用 kn 输出触发器信息

kn trigger describe 命令会输出有关一个触发器的信息。

流程

要输出关于触发器的信息,请输入以下命令:

$ kn trigger describe <TRIGGER-NAME>

输出示例:

$ kn trigger describe ping
Name:         ping
Namespace:    default
Labels:       eventing.knative.dev/broker=default
Annotations:  eventing.knative.dev/creator=kube:admin, eventing.knative.dev/lastModifier=kube:admin
Age:          2m
Broker:       default
Filter:
  type:       dev.knative.event

Sink:
  Name:       edisplay
  Namespace:  default
  Resource:   Service (serving.knative.dev/v1)

Conditions:
  OK TYPE                  AGE REASON
  ++ Ready                  2m
  ++ BrokerReady            2m
  ++ DependencyReady        2m
  ++ Subscribed             2m
  ++ SubscriberResolved     2m

10.4.5. 使用 kn删除触发器

流程

要删除触发器,请输入以下命令:

$ kn trigger delete <TRIGGER-NAME>

10.4.6. 使用 kn更新触发器

您可以使用带有特定标志的 kn trigger update 命令来快速更新触发器的属性。

流程

要更新触发器,请输入以下命令:

$ kn trigger update NAME --filter KEY=VALUE --sink SINK [flags]

您可以更新触发器来过滤与传入事件匹配的事件属性,如 type=knative.dev.event。例如:

$ kn trigger update mytrigger --filter type=knative.dev.event

您也可以从触发器中删除过滤器属性。例如,您可以使用键 type 来删除过滤器属性:

$ kn trigger update mytrigger --filter type-

以下示例演示了如何将触发器的 sink 更新为 svc:new-service:

$ kn trigger update mytrigger --sink svc:new-service

10.4.7. 使用触发器过滤事件

在以下触发器示例中,只有带有属性 type: dev.knative.samples.helloworld 的事件才会到达事件消费者。

$ kn trigger create foo --broker default --filter type=dev.knative.samples.helloworld --sink svc:mysvc

您还可以使用多个属性过滤事件。以下示例演示了如何使用类型、源和扩展属性过滤事件。

$ kn trigger create foo --broker default --sink svc:mysvc \
--filter type=dev.knative.samples.helloworld \
--filter source=dev.knative.samples/helloworldsource \
--filter myextension=my-extension-value