使用 Kyma Eventing 创建订阅
学习目标
创建订阅
前提条件
在开始之前,请确保满足以下前提条件:
您已在 SAP BTP 子账户中创建了 SAP BTP, Kyma runtime 实例。请参阅 使用 Kyma 在 SAP BTP 上部署 Kubernetes 集群 。
您已配置 kubectl 以便与您的 SAP BTP, Kyma runtime 实例进行交互,并且您有权访问 Kyma dashboard。请参阅 为 Kyma 设置和配置 Kubectl 和 使用 Kyma Dashboard 访问您的 Kyma Runtime 实例 。
您已添加 Eventing、NATS 和 Serverless 模块。请参阅 添加 Kyma 模块 。
使用场景
创建一个订阅多个事件类型的 Subscription,并在 SAP BTP, Kyma runtime 中用事件触发工作负载。
在了解到可以使用 SAP BTP, Kyma runtime 订阅事件之后,您将通过使用 Subscription 自定义资源订阅多个事件类型来将这知识付诸实践。您还将触发这些事件并验证它们已成功投递。
注意
我们强烈建议您使用免费层(Free Tier)服务,因为不包含在免费层中的服务会为您带来额外费用。
任务流程
在本练习中,您将执行以下步骤:
设置新命名空间。
创建 Function。
设置包含多种事件类型的 Subscription。
用事件触发工作负载。
确认事件投递。
任务 1:配置 NATS 后端
步骤
在 Kyma dashboard 中,选择 Modify Modules。
选择 Eventing 模块并选择 Edit。
选择 NATS 作为后端类型。
选择 Save。
结果
当您选择该后端类型后,Eventing 模块的状态变为 Ready。
任务 2:创建新的命名空间
步骤
从 SAP BTP cockpit 中,按照链接转到 Kyma dashboard。
转到 Namespaces 并选择 Create。
作为名称,输入
eventing并选择 Create。
结果
如果成功,您会看到新命名空间的详细信息。该命名空间的状态为 Active。
任务 3:创建 Function
步骤
在 Kyma dashboard 中,选择您在上一个任务中创建的命名空间。
转到 Workloads→Functions。 该命名空间尚不包含任何 Function。

选择 Create 并输入以下参数:
Name: lastorder
Language:JavaScript
Runtime:Node.js 20
替换 Function 编辑器的源内容:
module.exports = {
main: async function (event, context) {
console.log("Received event:", event.data);
return;
}
}
选择 Create。
结果
如果成功,几秒钟后该 Function 的状态为 Running。
任务 4:订阅多种事件类型
步骤
在
eventing命名空间中,转到 Configuration→Subscriptions,然后选择 Create。使用以下参数设置 Subscription:
Name: lastorder-sub
Types: order.received.v1 和 order.changed.v1
Service: lastorder
切换到 YAML 选项卡。
在
spec部分中,添加source: myapp。
...
spec:
source: myapp
...
选择 Create。
结果
如果成功,几秒钟后该 Subscription 的状态为 Ready。
任务 5:用事件触发工作负载
步骤
打开一个终端窗口并运行:
kubectl -n kyma-system port-forward service/eventing-publisher-proxy 3000:80
要发布事件 order.received.v1 并触发该 Function,请打开另一个终端窗口并运行:
curl -v -X POST \
-H "ce-specversion: 1.0" \
-H "ce-type: order.received.v1" \
-H "ce-source: myapp" \
-H "ce-eventtypeversion: v1" \
-H "ce-id: cc99dcdd-6f6d-43d6-afef-d024eb276584" \
-H "content-type: application/json" \
-d "{\"orderCode\":\"3211213\", \"orderStatus\":\"received\"}" \
http://localhost:3000/publish
要发布事件 order.changed.v1 并触发该 Function,请在同一个终端窗口中运行:
curl -v -X POST \
-H "ce-specversion: 1.0" \
-H "ce-type: order.changed.v1" \
-H "ce-source: myapp" \
-H "ce-eventtypeversion: v1" \
-H "ce-id: 94064655-7e9e-4795-97a3-81bfd497aac6" \
-H "content-type: application/json" \
-d "{\"orderCode\":\"3211213\", \"orderStatus\":\"changed\"}" \
http://localhost:3000/publish
在
eventing命名空间中,转到 Workloads→Functions 并选择您的 Functionlastorder。找到 Replicas of the Function 部分,然后选择副本的名称。
在 Containers 下,选择 View Logs。
结果
如果事件已成功投递,您会在日志中看到它们,如下例所示:
> nodejs20-runtime@0.1.0 start
> node server.js
user code loaded in 0sec 0.654321ms
Received event: { orderCode: '3211213', orderStatus: 'received' }
Received event: { orderCode: '3211213', orderStatus: 'changed' }
恭喜!您已成功完成这个关于 SAP BTP, Kyma runtime 中 Eventing 模块的练习。您创建了一个订阅两种事件类型的 Subscription,并用事件触发了工作负载。