使用 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)服务,因为不包含在免费层中的服务会为您带来额外费用。

任务流程

在本练习中,您将执行以下步骤:

  1. 设置新命名空间。

  2. 创建 Function。

  3. 设置包含多种事件类型的 Subscription。

  4. 用事件触发工作负载。

  5. 确认事件投递。

任务 1:配置 NATS 后端

步骤

  1. 在 Kyma dashboard 中,选择 Modify Modules

  2. 选择 Eventing 模块并选择 Edit

  3. 选择 NATS 作为后端类型。

  4. 选择 Save

结果

当您选择该后端类型后,Eventing 模块的状态变为 Ready

任务 2:创建新的命名空间

步骤

  1. 从 SAP BTP cockpit 中,按照链接转到 Kyma dashboard。

  2. 转到 Namespaces 并选择 Create

  3. 作为名称,输入 eventing 并选择 Create

结果

如果成功,您会看到新命名空间的详细信息。该命名空间的状态为 Active

任务 3:创建 Function

步骤

  1. 在 Kyma dashboard 中,选择您在上一个任务中创建的命名空间。

  2. 转到 WorkloadsFunctions。 该命名空间尚不包含任何 Function。 创建 Function

  3. 选择 Create 并输入以下参数:

  • Name: lastorder

  • Language:JavaScript

  • Runtime:Node.js 20

  1. 替换 Function 编辑器的源内容:

module.exports = {
main: async function (event, context) {
console.log("Received event:", event.data);
return;
}
}
  1. 选择 Create

结果

如果成功,几秒钟后该 Function 的状态为 Running

任务 4:订阅多种事件类型

步骤

  1. eventing 命名空间中,转到 ConfigurationSubscriptions,然后选择 Create

  2. 使用以下参数设置 Subscription:

  • Name: lastorder-sub

  • Types: order.received.v1 和 order.changed.v1

  • Service: lastorder

  1. 切换到 YAML 选项卡。

  2. spec 部分中,添加 source: myapp

...
spec:
source: myapp
...
  1. 选择 Create

结果

如果成功,几秒钟后该 Subscription 的状态为 Ready

任务 5:用事件触发工作负载

步骤

  1. 打开一个终端窗口并运行:

kubectl -n kyma-system port-forward service/eventing-publisher-proxy 3000:80
  1. 要发布事件 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
  1. 要发布事件 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
  1. eventing 命名空间中,转到 WorkloadsFunctions 并选择您的 Function lastorder

  2. 找到 Replicas of the Function 部分,然后选择副本的名称。

  3. 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,并用事件触发了工作负载。