GrowthStore实战(二)DataHub数据推送

开篇不多说,先飘过一个链接

GrowthStore -- The popular ORM and API Server

在上一篇GrowthStore实战(一)文章中,我们主要使用了GrowthStore基础的存储服务,自定义查询服务功能。这次我尝试一些新的功能,compose扩展插件,使用RhaiScript脚本编客户端推送数据到DataHub数据总线中。

DataHub数据总线提供的SDK中只有Java、C++、Go、Python这些语言。并没有Rust语言的SDK开发包。GrowthStore采用的是Rust开发的,所以接下来发挥我们动手能力的时候了。翻看DataHub的文档,只能可以采用调用API的方式,自己封装Rust API的客户端。

仔细翻看DataHub的API参考接口,甚是麻烦啊。你应该看不下去,但是还得看。默认我当你已经看懂了。接下来我们就用compose扩展插件方式编写相关的RhaiScript脚本。

首先先创建一个compose的扩展,我们就叫做DataHub

点击DataHub扩展,进入配置页面,新增一个push推送的rhai脚本扩展点。

先贴出这段脚本

let accessId="你的accessId";
let accessKey="你的accessKey";
let httpMethod="POST" ;
let contentType="application/json";
let nowGmt= now_utc().to_rfc2822();
nowGmt.replace("+0000", "GMT");
let projectName="silinetest";
let topicName="help_computer";
let baseUrl="https://dh-cn-hangzhou.aliyuncs.com";
let topicUrl=`/projects/${projectName}/topics/${topicName}/shards`;
let postUrl=`${baseUrl}${topicUrl}`;
let version="1.1";
let canonicalizedDataHubHeaders=`x-datahub-client-version:${version}`; 
let canonicalizedResource=`${topicUrl}`; 
let request_string = httpMethod+"\n"+contentType+"\n"+nowGmt+"\n"+canonicalizedDataHubHeaders+"\n"+canonicalizedResource;
print("Request: " + request_string);
let signature=base64encode(hmac_sha1(accessKey, request_string));

print(`The signature: ${signature}`);

let authorization = `DATAHUB ${accessId}:${signature}`;
print(`The authorization : ${authorization}`);

let data = #{
	"Action":"pub",
    "Records":[
          #{
			"ShardId": "3",
			"Attributes": #{
			   "name": "value1",
			   "path": "value2",
               "desc":"xxxx"
			},
			"Data": ["张三","test","其他"]
          }
     ]
};
let head = #{"header":#{
       "Authorization":authorization,
       "Content-Type":contentType,
       "Date":nowGmt,
       "x-datahub-client-version":version
}, "head_title_case": true};

print("post " + postUrl);

print(`${new_json_object(head)}`);

const res=http_post(postUrl, new_json_object(data), new_json_object(head));

print(`The res: ${res}`);

res

是不是很麻木,看到这个脚本。用到了很多函数,比如获取时间now_utc(),base64编码base64encode,HMAC-SHA1签名算法hmac_sha1、还有HTTP请求函数http_post、new_json_object等等。为什么这么复杂呢,那应该问一下Datahub的开发人员。哈哈。。。(还是有必要多看看DataHub的API参考的,安全性需要)

这么多的函数,在哪里学习呢,Rhai脚本又在哪里学习呢?

Rhai脚本学习:The Rhai Book - Rhai - Embedded Scripting for Rust

多翻看一下学习文档:GrowthStore使用手册

还有多翻翻源码

GrowthStore: GrowthStore是一个基于Rust体系的成长型的企业级后台服务的开发框架。它提供了“约定大于配置,配置即服务”的开发理念,采用统一的约定、灵活的配置来实现绝大多数的业务,通过灵活高效的扩展体系,来满足各种特殊化的业务需求,快速应对企业的业务成长需要。GrowthStore的出现,为企业级后端开发注入了新鲜的血液,它将成为Java之外的首选。

源码找到 store-plugin-rhai 这个包,通过对Rhai的二次封装。增加了相关的函数。

来看看数据推送后,实际效果:

本文重点讲解的使用compose插件并用Rhai脚本编写DataHub的API请求。使用Compose插件还可以实现定时任务调度、文件上传处理、数据同步ETL等能力。后面我们慢慢实践这些功能。

一、项目简介 本项目教程以国内电商巨头实际业务应用场景为依托,同时以阿里云ECS服务器为技术支持,紧跟大数据主流场景,对接企业实际需求,对电商数仓的常见实战指标进行了详尽讲解,让你迅速成长,获取最前沿的技术经验。 、项目架构 版本框架:Flume、DateHub、DataWorks、MaxCompute、MySql以及QuickBI等; Flume:大数据领域被广泛运用的日志采集框架; DateHub:类似于传统大数据解决方案中Kafka的角色,提供了一个数据队列功能。对于离线计算,DataHub除了供了一个缓冲的队列作用。同时由于DataHub提供了各种与其他阿里云上下游产品的对接功能,所以DataHub又扮演了一个数据的分发枢纽工作; 据上传和下载通道,提供SQL及MapReduce等多种计算分析服务,同时还提供完善的安全解决方案; DataWorks:是基于MaxCompute计算引擎,从工作室、车间到工具集都齐备的一站式大数据工厂,它能帮助你快速完成数据集成、开发、治理、服务、质量、安全等全套数据研发工作; QuickBI & DataV:专为云上用户量身打造的新一代智能BI服务平台。 三、项目场景 数仓项目广泛应用于大数据领域,该项目技术可以高度适配电商、金融、医疗、在线教育、传媒、电信、交通等各领域; 四、项目特色 本课程结合国内多家企业实际项目经验。从集群规模的确定到框架版本选型以及服务器选型,手把手教你从零开始搭建基于阿里云服务器的大数据集群。采用阿里云ECS服务器作为数据平台,搭建高可用的、高可靠的Flume数据采集通道,运用阿里云DateHub构建中间缓冲队列并担任数据分发枢纽将数据推送至阿里自主研发的DataWorks对数据进行分层处理,采用MaxCompute作为处理海量数据的方案,将计算结果保存至MySQL并结合阿里的QuickBI工作做最终数据展示。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值