图的编排规范
图的编排格式用来描述一张图的完整信息,主要包含三部分内容:图属性,功能单元定义,功能单元之间的关系定义。ModelBox框架图配置采用Graphviz DOT语法进行定义,图的配置文件采用toml文件形式。下面对图的编排格式进行说明。
如下以一个简单的业务样例,总共有三个功能单元:
- HTTP REQUEST功能单元:启动http server服务,有一个输出端口“OUT”;
- PROCESS功能单元:接受数据后调用PROCESS功能处理数据并输出,有一个输入端口“IN”和一个输出端口“OUT”;
- HTTP RESPENSE功能单元:接受数据后,将结果回应到HTTP客户端,有一个输入端口“IN”。
使用Graphviz DOT 语法和TOML配置格式完整图配置描述结果如下:
[grasph]
graphconf = '''
//定义图属性
digraph G {
//定义功能单元属性
HTTP_REQUEST[flowunit=http, listen="0.0.0.0:80", label="{HTTP REQUEST|{OUT}}"]
PROCESS[flowunit=json, label="{{IN}|PROCESS|{OUT}}"]
HTTP_RESPONSE[flowunit=http,type="flowunit",label="{{IN}|HTTP RESPONSE}"]
//定义功能单元关系
HTTP_REQUEST:OUT->PROCESS:IN
PROCESS:OUT->HTTP_RESPONSE:IN
}
'''format
format = "graphviz"
第一部分是图属性,包含图名称和图的描述语法
格式: digraph [name]
说明 : digraph开头,[name]可以是字符串。
第二部分是功能单元的定义
格式: name[key=value]
说明: name为功能单元的别名,用户可自定义,用来区分同一功能单元在图里可多次使用。key为功能单元的配置属性,每个功能单元不同,value为key的配置值。
flowunit=http为指定功能单元的实体名称。
type=xx参数指定点功能单元的类型,可以是input, output, flowunit,缺省为flowunit。
第三部分是功能单元的关系定义
格式: name:outport -> name:inport
说明: name为点的名称,outport为输出端口名称,inport为输入端口名称。
满足如上规范即可进行图的编排,ModelBox图的编排存在如下约束:
- 图必须为有向无环图,有开始有结束,不能形成循环;
- 功能单元之间的关系需要和功能单元输入输出端口匹配;
- 所有功能单元需要有关系连接,不支持孤立的功能单元;
- 具有输入端口的功能单元前面必须连接其他功能单元。