使用 Knative 服务作为源¶
在本教程中,您将使用 CloudEvents Player 应用程序展示 Knative Eventing 的核心概念。在本教程结束时,您应该拥有一个看起来像这样的架构
上图是来自 Knative 实战 的图 6.6。
创建您的第一个源¶
CloudEvents Player 通过将 Broker 的名称作为环境变量 BROKER_NAME
输入来充当 CloudEvents 的源。如果 Broker 位于不同的命名空间,也可以设置 BROKER_NAMESPACE
环境变量。或者,您也可以直接使用 BROKER_URI
。
您将通过 CloudEvents Player 应用程序将 CloudEvents 发送到 Broker。
创建 CloudEvents Player 服务
运行命令
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 的位置,所以让我们在服务和 Broker 之间创建一个 SinkBinding。
运行命令
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。 如果您在浏览器中打开服务 URL,创建事件 表单就会出现。
服务 URL 为 http://cloudevents-player.default.${LOADBALANCER_IP}.sslip.io
,例如,对于 kind
,服务 URL 为 http://cloudevents-player.default.127.0.0.1.sslip.io。
这些字段的含义是什么?
字段 | 描述 |
---|---|
事件 ID |
一个唯一的 ID。单击循环图标以生成一个新的 ID。 |
事件类型 |
一个事件类型。 |
事件源 |
一个事件源。 |
Specversion |
标明您正在使用哪个 CloudEvents 规范(应始终为 1.0)。 |
消息 |
CloudEvent 的 data 部分,一个承载您关心要传递数据的有效负载。 |
有关 CloudEvents 规范的更多信息,请查看 CloudEvents 规范。
发送事件¶
尝试使用 CloudEvents Player 界面发送事件
- 使用您想要的任何数据填写表单。
- 确保您的事件源不包含任何空格。
- 单击发送事件。
单击 将向您显示 Broker 看到的 CloudEvent。
想使用命令行而不是 Web 表单发送事件吗?
作为 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 只是一个事件容器。为了让您的事件发送到任何地方,您必须创建一个监听您的事件并将其放置在某处的触发器。而且您很幸运;您将在下一页创建您的第一个触发器!