Skip to main content

moregeek program

uknow | 优维低代码:custom processors 自定义加工函数_mb625d3d7a6c262的博客-多极客编程

Uknow | 优维低代码:Custom Processors 自定义加工函数_数据

Uknow | 优维低代码:Custom Processors 自定义加工函数_数据_02

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。


连载第二十七期

《高级指引:Custom Processors 自定义加工函数

# 背景

在编排微应用时,经常需要进行数据加工,有时候需要编写数十行、甚至数百行的代码,无论是在求值表达式 <% ... %> 还是在 script-brick 中编写,都无法保障代码的可维护性、质量可靠性等基本要求,同时其复用成本也较高。Custom Processors 正是为了解决这个问题。

说明

一个 Custom Processors 实际是一个全局注册的、具有特定业务属性的纯函数,它应只负责加工处理数据,因此它有以下要求:

  • 注册的名称需要加上包名作为 namespace,以避免可能的冲突;
  • 不能使用异步方法;
  • 不应产生副作用;
  • 编写单元测试。

# 与 Pipes 管道的区别

Pipes 管道 是由框架直接提供的全局注册的纯函数,看起来和 Custom Processors 很像,它们的区别主要是 Pipes 由框架直接提供,具有通用性的加工函数才会纳入框架,而 Custom Processors 由构件包提供,通常具有特定的业务属性、而不具备通用性。

# 示例

在 next-* 相关仓库中使用脚手架工具 yarn yo 并选择 a new custom processor 可以快速创建一个 Custom Processor。

初始化好的 Custom Processor 大约长这样:

// @file: next-*/bricks/your-package/src/custom-processors/modelsToGraph.ts
import { getRuntime } from "@next-core/brick-kit";


export function modelsToGraph(models: ModelData[]): Graph {
// Some hard work.
}


// A camelCase of the package name namespace is auto generated to avoid name collisions.
getRuntime().registerProcessor("yourPackage.modelsToGraph", modelsToGraph);

编写单元测试:

// @file: modelsToGraph.spec.ts
import { modelsToGraph } from "./modelsToGraph";


describe("modelsToGraph", () => {
it("should work", () => {
expect(modelsToGraph(models)).toEqual(...);
});
});

编排时,可以在任意表达式中使用:

- brick: "your.any-brick"
properties:
someProp: "<% PROCESSORS.yourPackage.modelsToGraph(CTX.models) %>"

框架现在在 Storyboard 的表达式中支持了 Pipeline Operators (Minimal version),对于连续的加工处理可以使用类似以下的方式编写:

- brick: "your.any-brick"
properties:
someProp: |-
<%
CTX.modelsYamlString
|> PIPES.yaml
|> PROCESSORS.yourPackage.modelsToGraph
// 如需在 pipeline operators 中传递额外参数,可以自行包装一个箭头函数。
|> (_ => PIPES.jsonStringify(_, null, 2))
%>

Custom Processors 是构件包的资源,和普通构件类似,框架会根据 Micro App 的使用情况,自动按需加载相关的构件包。

©著作权归作者所有:来自51CTO博客作者优维科技EasyOps的原创作品,请联系作者获取转载授权,否则将追究法律责任

【10.29-11.4】博客精彩回顾-多极客编程官方账号的博客-多极客编程

一、优秀文章推荐1.​​vue中引入高德地图Loca数据可视化​​2.​​SpringBoot自定义注解+异步+观察者模式实现业务日志保存​​​3.​​【原子样式实践】一次搞定微信开发者工具的原子样式扩展​​4.​​C++ 不知树系列之认识二叉树(顺序、链表存储的实现)​​5.​​原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑​​6.​​Vue开发历程---音乐播放器的继续​​7.​​【计

nginx高并发优化之事件驱动模块设置_清晨的博客-多极客编程

一、概述events { use epoll; worker_connections 65535;}二、说明1、use epoll;设置事件驱动模型使用epoll。事件驱动模型有select、poll、poll等。select先创建事件的描述符集合,对于一个描述符,可以关注其上面的Read事件、Write事件以及Exception事件,所以要创建三类事件描述符 集合,

nginx 和 tomcat 实现负载均衡_段嘉许的博客-多极客编程

Nginx 和 tomcat 实现负载均衡📒博客主页: ​​微笑的段嘉许博客主页​​ 🎉欢迎关注🔎点赞👍收藏⭐留言📝📌本文由微笑的段嘉许原创!📆51CTO首发时间:🌴2022年11月日4🌴✉️坚持和努力一定能换来诗与远方!🙏作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!⭐本文介绍⭐​ 在上一篇文章中已经介绍了Nginx服务器的安装配置,感兴

centos 7部署weblogic 14_mingo的博客-多极客编程

相关资源下载: JDK:JDK 1.8.0 Weblogic:Weblogic 14.1.1.0 安装Java环境 [root@weblogic ~]# tar -zxf jdk-8u251-linux-x64.tar.gz [root@weblogic ~]# cd /usr/local/ [root@weblogic local]# mkdir jdk [root@weblogic local

dubbo 2.6.8 移植指南(openeuler 20.03 lts sp1)_openeuler的博客-多极客编程

介绍 简要介绍 Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC(远程过程调用)实现服务的输出和输入功能,可以和Spring框架无缝集成。简单地说,Dubbo是一个基于Spring的RPC框架,能够实现服务的远程调用、服务的治理。 建议版本 建议使用Dubbo 2.6.8版本。 环境要求 硬件要求 硬件要求如表1所示。 项目 说明 CPU 鲲鹏92

配置apache虚拟主机_mb6350fe535a391的博客-多极客编程

拓扑图:推荐步骤:配置基于IP地址的虚拟主机,第一个虚拟主机监听IP地址为192.168.100.100访问benet网站根目录,第二个虚拟主机监听IP地址为192.168.100.200访问accp网站根目录,使用http://192.168.100.100和http://192.168.100.200验证两个虚拟主机配置基于端口的虚拟主机,第一个虚拟主机监听IP地址为192.168.100.1

【10.29-11.4】博客精彩回顾-多极客编程官方账号的博客-多极客编程

一、优秀文章推荐1.​​vue中引入高德地图Loca数据可视化​​2.​​SpringBoot自定义注解+异步+观察者模式实现业务日志保存​​​3.​​【原子样式实践】一次搞定微信开发者工具的原子样式扩展​​4.​​C++ 不知树系列之认识二叉树(顺序、链表存储的实现)​​5.​​原生拖拽太拉跨了,纯JS自己手写一个拖拽效果,纵享丝滑​​6.​​Vue开发历程---音乐播放器的继续​​7.​​【计

oom排查_雍州无名的博客-多极客编程

1.外在表现前段时间系统经常出现OOM,服务很不稳定,偶尔会有java进程不存在的情况,临时解决方案只能是重启。2.辅助工具(1).top用top查看,发现内存占用(%MEM)挺多,其他指标均正常。(2).dmesg如果发现自己的java进程突然消失了,那么就要借助dmesg来查看开机之后的系统日志命令为dmesg | grep -i 'kill'或者搜索oom(out of memory),如果

nginx高并发优化之事件驱动模块设置_清晨的博客-多极客编程

一、概述events { use epoll; worker_connections 65535;}二、说明1、use epoll;设置事件驱动模型使用epoll。事件驱动模型有select、poll、poll等。select先创建事件的描述符集合,对于一个描述符,可以关注其上面的Read事件、Write事件以及Exception事件,所以要创建三类事件描述符 集合,

分布式事务的性能设计_枫叶飘飘的博客-多极客编程

分布式事务的性能设计,主要包含吞吐量和相应延迟两方面。分布式事务更适合对吞吐量要求高,对相应延迟要求不苛刻的应用。性能设计有三个层面,分别为代码优化层、算法逻辑层以及架构设计层。1、代码优化层代码优化层关注代码细节优化,代码实现是否合理,是否创建了过多的对象,循环遍历是否高效,cache使用是否高效、合理,是否重用计算结果等,具体分析如下。循环遍历是否高效:不要在循环里调用RPC接口、查询分布式缓

分布式列式数据存储系统druid_枫叶飘飘的博客-多极客编程

Druid是一个用于大数据实时查询与分析的分布式列式数据存储系统。为了应对海量数据的实时查询和多维分析,Druid应运而生。 Druid诞生于MetaMarkets公司,而互联网广告分析正是MetaMarkets最重要的业务之一,基于同样的业务需求背景,微博广告也开始尝试将 Druid 作为监控平台后端数据引擎的技术方案之一。一、Druid特性Druid的特性如下: 支持部分嵌套数据结构的列式存储

centos 7部署weblogic 14_mingo的博客-多极客编程

相关资源下载: JDK:JDK 1.8.0 Weblogic:Weblogic 14.1.1.0 安装Java环境 [root@weblogic ~]# tar -zxf jdk-8u251-linux-x64.tar.gz [root@weblogic ~]# cd /usr/local/ [root@weblogic local]# mkdir jdk [root@weblogic local