评论

收藏

[NoSQL] 在 SAP BTP Kyma Runtime 上使用 Redis 读取和存储数据

数据库 数据库 发布于:2021-07-10 13:26 | 阅读数:412 | 评论:0

  https://developers.sap.com/tutorials/cp-kyma-redis-function.html
  This sample provides a Redis deployment and two serverless functions that interact with it.
  这个例子提供了一个 Redis 应用部署和两个使用 Redis 的 serverless 函数。
  The function cache-order will be set to subscribe to an order.created event provided by the Commerce mock application.
  Commerce Mock 应用有一个 order.created 事件,cache-order 函数订阅这个事件。
  Once triggered, the function will perform an API call to the Commerce mock to obtain additional details regarding the order and then cache the information into Redis.
  一旦 order.created 事件触发,cache-order 函数响应该事件,调用一个 Commerce Mock API,读取创建订单的更多明细,然后将数据存储到 Redis 里。
  The function get-order, exposed as an API, is used to then retrieve the order details from the Redis cache.
  函数 get-order, 以 API 的形式暴露,负责从 Redis cache 里读取订单明细。
  从这个Github仓库里下载 sample 代码。
  进入 Kyma 控制台,点击 Create Binding:
DSC0000.png
  In this step, you will bind the Commerce Mock application to the dev namespace. This will allow the APIs and Events of the mock application to be used within the namespace.
  这一步会将 Commerce Mock 应用同 dev 命名空间绑定在一起,这使得 Mock 应用的 API 和 Events 能够在 dev 命名空间内被使用。
DSC0001.png

  点击 Create:
DSC0002.png
DSC0003.png

Create the Events service instances - 创建事件服务实例
  In this step, you will create service instances of the Events the Commerce Mock application exposes. This will allow the events to be consumed from resources within the namespaces such as functions or microservices.
  创建 Commerce Mock 应用暴露的事件的服务实例。这样,dev 命名空间下的资源,比如 functions 和 microservices 就能够消费这些事件。
  选择 commerce-mock:
DSC0004.png

  选择 SAP Commerce Cloud - Events:
DSC0005.png
  点击 Add 按钮,创建一个 Service 实例:
DSC0006.png
DSC0007.png

  创建好的 service 实例:
DSC0008.png
Step 4: Create API service instances
  In this step, you will create a service instance of the Commerce Webservices the Mock application exposes.
  Mock Application 暴露的 Commerce Web Service, 可以基于其创建服务实例。该服务实例能够将 API 暴露给同一命名空间下的其他资源,比如函数和微服务。
DSC0009.png

DSC00010.png

  查看两个成功创建的服务实例:
DSC00011.png
  下一步,部署三个资源到 Kyma 上:

  • cache-order: This function will subscribe to an event published by the Commerce mock application. Once triggered, it will call back to the Commerce mock application to obtain the totalPriceWithTax and then cache the information into Redis.
  该函数订阅 Commerce Mock Application 暴露的 order.created 事件。该事件发生后,cache-order 函数调用 Commerce mock Application,获得 totalPriceWithTax,然后存储到 Redis 去。

  • get-order: This function will be exposed as an API allowing retrieval of data stored within the Redis cache.
  Redis cache 里通过 cache-order 存储的订单信息,通过 get-order 暴露给消费者。

  • redis-deployment: This deployment defines the Redis cache configuration and the associated Kubernetes service which exposes the Redis instance to the two Serverless functions.
  这个 deployment 定义了 Redis cache 配置信息,以及关联的 Kubernetes Service, 后者将 Redis 实例暴露给(1)(2) 两个 serverless 函数使用。
  依次将 k8s 文件夹下的 yaml 文件进行部署:
DSC00012.png

  确保 deployment 状态全部为 Running:
DSC00013.png
Add event subscription to function
  In this step, you will configure the function cache-order, deployed in the previous step, to run when the order.created event is fired from the Commerce Mock application.
  这一步,将 cache-order 订阅到 order.created 事件上。
  从 functions 列表里找到 cache-order:
DSC00014.png

  创建一个事件订阅 Event subscription:
DSC00015.png
DSC00016.png

  cache-order function 需要调用对应的 API,因此需要为其创建 service binding.
DSC00017.png
  通过这个 Service Binding,就可以借助该 Service Instance,调用 Commerce Webservice了:
DSC00018.png
对 function 代码进行微调
DSC00019.png

  找到环境变量里包含 GATEWAY_URL 的变量:
DSC00020.png
  点击 commerce-mock 的 host 超链接,手动触发一个 order.created 事件。
DSC00021.png
  点击 Remote API:
DSC00022.png
  找到 SAP Commerce Cloud - Events:
DSC00023.png
  点击按钮 Send Event,模拟发送一个 order.created 事件,payload 里包含的 orderCode 为 76270000:
DSC00024.png

  事件成功发送:
DSC00025.png
  在 cache-order 的 logs 面板里,果然看到了订单 code 76270000 对应的处理日志:
DSC00026.png

  下一步,再试试 get-order 函数,是否能够从 Redis cache 中读取订单信息。
  点击这个超链接:https://get-order.c-46d70f2.kyma.shoot.live.k8s-hana.ondemand.com/
DSC00027.png
  会收到如下错误消息:“error”: “No orderCode received!”
DSC00028.png
  这是因为我们尚未为该 serverless function 指定 orderCode.
  试试在 url 后手动加上 orderCode:
  https://get-order.c-46d70f2.kyma.shoot.live.k8s-hana.ondemand.com/?orderCode=76270000
DSC00029.png
  现在就能够正常工作了。
  


  

  
关注下面的标签,发现更多相似文章