完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
接下来我们介绍如何通过表格存储提供的通道服务,实现 Knative 对接表格存储事件源,订阅并通过钉钉发送天气提醒通知。
整体架构回顾一下整体架构:
先看一下处理流程图:
自定义 TableStore 事件源在 Knative 中自定义事件源其实很容易,可以参考官方提供的自定义事件源的实例:https://github.com/knative/docs/tree/master/docs/eventing/samples/writing-a-source。 我们这里定义数据源为 AliTablestoreSource。代码实现主要分为两部分:
部署自定义事件源服务如下: 从 https://github.com/knative-sample/tablestore-source/tree/master/config 中可以获取事件源部署文件,执行下面的操作: kubectl apply -f 200-serviceaccount.yaml -f 201-clusterrole.yaml -f 202-clusterrolebinding.yaml -f 300-alitablestoresource.yaml -f 400-controller-service.yaml -f 500-controller.yaml -f 600-istioegress.yaml 部署完成之后,我们可以看到资源控制器已经开始运行: [root@iZ8vb5wa3qv1gwrgb3lxqpZ config]# kubectl -n knative-sources get podsNAME READY STATUS RESTARTS AGEalitablestore-controller-manager-0 1/1 Running 0 4h12m 创建事件源由于我们是通过 Knative Eventing 中 Broker/Trigger 事件驱动模型对天气事件进行处理。首先我们创建用于数据接收的 Broker 服务。 创建 BrokerapiVersion: eventing.knative.dev/v1alpha1kind: Brokermetadata: name: weatherspec: channelTemplateSpec: apiVersion: messaging.knative.dev/v1alpha1 kind: InMemoryChannel 创建事件源实例这里需要说明一下,创建事件源实例其实就是在表格存储中创建通道服务,那么就需要配置访问通道服务的地址、accessKeyId 和 accessKeySecret,这里参照格式:{ "url":"https://xxx.cn-beijing.ots.aliyuncs.com/", "accessKeyId":"xxxx","accessKeySecret":"xxxx" } 设置并进行 base64 编码。将结果设置到如下 Secret 配置文件 alitablestore 属性中: apiVersion: v1kind: Secretmetadata: name: alitablestore-secrettype: Opaquedata: # { "url":"https://xxx.cn-beijing.ots.aliyuncs.com/", "accessKeyId":"xxxx","accessKeySecret":"xxxx" } alitablestore: " 创建 RBAC 权限: apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: eventing-sources-alitablestoresubjects:- kind: ServiceAccount name: alitablestore-sa namespace: defaultroleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: eventing-sources-alitablestore-controller---apiVersion: v1kind: ServiceAccountmetadata: name: alitablestore-sasecrets:- name: alitablestore-secret 创建 AliTablestoreSource 实例,这里我们设置接收事件的 sink 为上面创建的 Broker 服务。 ---apiVersion: sources.eventing.knative.dev/v1alpha1kind: AliTablestoreSourcemetadata: labels: controller-tools.k8s.io: "1.0" name: alitablestoresourcespec: # Add fields here serviceAccountName: alitablestore-sa accessToken: secretKeyRef: name: alitablestore-secret key: alitablestore tableName: weather instance: knative-weather sink: apiVersion: eventing.knative.dev/v1alpha1 kind: Broker name: weather 创建完成之后,我们可以看到运行中的事件源: [root@iZ8vb5wa3qv1gwrgb3lxqpZ config]# kubectl get podsNAME READY STATUS RESTARTS AGEtablestore-alitablestoresource-9sjqx-656c5bf84b-pbhvw 1/1 Running 0 4h9m 订阅事件和通知提醒创建天气提醒服务如何进行钉钉通知呢,我们可以创建一个钉钉的群组(可以把家里人组成一个钉钉群,天气异常时,给家人一个提醒),添加群机器人: 获取 webhook : 这里我们假设北京 (110000),日期:2019-10-13, 如果天气有雨,就通过钉钉发送通知提醒,则服务配置如下: apiVersion: serving.knative.dev/v1beta1kind: Servicemetadata: name: day-weatherspec: template: spec: containers: - args: - --dingtalkurl=https://oapi.dingtalk.com/robot/send?access_token=xxxxxx - --adcode=110000 - --date=2019-10-13 - --dayweather=雨 image: registry.cn-hangzhou.aliyuncs.com/knative-sample/dingtalk-weather-service:1.2 关于钉钉提醒服务具体实现参见 GitHub 源代码:https://github.com/knative-sample/dingtalk-weather-service 创建订阅最后我们创建 Trigger订阅天气事件,并且触发天气提醒服务: apiVersion: eventing.knative.dev/v1alpha1kind: Triggermetadata: name: weather-triggerspec: broker: weather subscriber: ref: apiVersion: serving.knative.dev/v1alpha1 kind: Service name: day-weather 订阅之后,如果北京 (110000),日期:2019-10-13, 天气有雨,会收到如下的钉钉提醒: 这里其实还有待完善的地方:
小结本文介绍了如何在 Knative 中自定义事件源,并通过事件驱动接收天气变化信息,订阅并通过钉钉推送通知提醒。这样基于 Knative Serverless 技术实现天气服务整体实现就介绍完了。有兴趣的同学可以针对上面提到的不足继续研究。还是那句话,做好天气服务不容易,但还好我有 Knative。 本文作者:一绿舟 原文链接 本文为云栖社区原创内容,未经允许不得转载。 |
|
相关推荐
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
基于 DSP5509 进行数字图像处理中 Sobel 算子边缘检测的硬件连接电路图
2568 浏览 0 评论
708 浏览 0 评论
普中科技F28335开发板中,如何使用aic23播放由代码生成的正弦波
3005 浏览 0 评论
3771 浏览 1 评论
1228 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 17:20 , Processed in 0.519265 second(s), Total 49, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号