开篇不多说,先飘过一个链接
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使用手册
还有多翻翻源码
源码找到 store-plugin-rhai 这个包,通过对Rhai的二次封装。增加了相关的函数。

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

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

被折叠的 条评论
为什么被折叠?



