将 Knative Service 用作源¶
在本教程中,您将使用 CloudEvents Player 应用来展示 Knative Eventing 的核心概念。在本教程结束时,您应该会拥有一个如下所示的架构

上图是来自 Knative in Action 的图 6.6。
创建第一个源¶
CloudEvents Player 通过将 Broker 的名称作为环境变量 BROKER_NAME 注入来充当 CloudEvents 的源。如果 Broker 位于不同的命名空间中,则还可以设置 BROKER_NAMESPACE 环境变量。或者,您也可以直接使用 BROKER_URI。
您将通过 CloudEvents Player 应用程序将 CloudEvents 发送到 Broker。
创建 CloudEvents Player Service
运行命令
kn service create cloudevents-player \
--image quay.io/ruben/cloudevents-player:latest
预期输出
Service 'cloudevents-player' created to latest revision 'cloudevents-player-00001' is available at URL:
http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io
-
将以下 YAML 复制到一个名为
cloudevents-player.yaml的文件中apiVersion: serving.knative.dev/v1 kind: Service metadata: name: cloudevents-player spec: template: metadata: annotations: autoscaling.knative.dev/min-scale: "1" spec: containers: - image: quay.io/ruben/cloudevents-player:latest -
通过运行命令应用 YAML 文件
kubectl apply -f cloudevents-player.yaml预期输出
service.serving.knative.dev/cloudevents-player created
服务现在正在运行,但它不知道 Broker 在哪里,所以让我们创建一个 SinkBinding 来连接服务和 Broker。
运行命令
kn source binding create ce-player-binding --subject "Service:serving.knative.dev/v1:cloudevents-player" --sink broker:example-broker
预期输出
Sink binding 'ce-player-binding' created in namespace 'default'.
-
将以下 YAML 复制到一个名为
cloudevents-player-binding.yaml的文件中apiVersion: sources.knative.dev/v1 kind: SinkBinding metadata: name: ce-player-binding spec: sink: ref: apiVersion: eventing.knative.dev/v1 kind: Broker name: example-broker subject: apiVersion: serving.knative.dev/v1 kind: Service name: cloudevents-player -
通过运行命令应用 YAML 文件
kubectl apply -f cloudevents-player-binding.yaml预期输出
sinkbinding.sources.knative.dev/ce-player-binding created
检查 CloudEvents Player¶
您可以使用 CloudEvents Player 发送和接收 CloudEvents。 如果您在浏览器中打开 Service URL,则会出现“创建事件”表单。
Service URL 为 http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io,例如,对于 kind,URL 为 http://cloudevents-player.default.127.0.0.1.sslip.io。

这些字段是什么意思?
| 字段 | 描述 |
|---|---|
事件 ID |
一个唯一的 ID。单击循环图标生成一个新的。 |
事件类型 |
一个事件类型。 |
事件源 |
一个事件源。 |
Specversion |
标示您正在使用哪个 CloudEvents 规范(应始终为 1.0)。 |
消息 |
CloudEvent 的 data 部分,一个承载您关心的要传递的数据的有效负载。 |
有关 CloudEvents 规范的更多信息,请查看 CloudEvents Spec。
发送事件¶
尝试使用 CloudEvents Player 界面发送事件
- 在表单中填写您想要的任何数据。
- 确保您的事件源不包含任何空格。
- 单击“发送事件”。

单击 显示 Broker 如何看到 CloudEvent。

想改用命令行发送事件吗?
作为 Web 表单的替代方案,也可以使用命令行发送/查看事件。
发布事件
curl -i http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io \
-H "Content-Type: application/json" \
-H "Ce-Id: 123456789" \
-H "Ce-Specversion: 1.0" \
-H "Ce-Type: some-type" \
-H "Ce-Source: command-line" \
-d '{"msg":"Hello CloudEvents!"}'
查看事件
curl http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io/messages
“状态”列中的 图标表示事件已发送到我们的 Broker……但事件去了哪里?嗯,现在,哪里都没去!
Broker 只是一个事件的容器。为了让您的事件发送到任何地方,您必须创建一个监听您的事件并将它们放在某个地方的 Trigger。而且,您很幸运;您将在下一页创建您的第一个 Trigger!