CS Client
微服务向cs-server申请一个上下文对象的能力
微服务能够向cs-server更新上下文信息的能力
某一些特殊的微服务能够嗅探到cs-server中已经修改了上下文信息的操作
CSClient需要提供复制csid1所有上下文信息为一个新的csid2用来提供给调度执行的
申请上下文对象,例如用户在前端新建了一条工作流,dss-server需要向dss-server申请一个上下文对象,申请上下文对象的时候,需要将工作流的标识信息(工程名、工作流名)通过CSClient发送到CSServer中(这个时候gateway应该是随机发送给一个的,因为此时没有携带csid的信息),申请上下文一旦反馈到正确的结果之后,就会返回一个csid和该工作流进行绑定。
注册上下文的能力,例如用户在前端页面上传了资源文件,文件内容上传到dss-server,dss-server将内容存储到bml中,然后需要将从bml中获得的resourceid和version注册到cs-server中,此时需要使用到csclient的注册的能力,注册的能力是通过传入csid,以及cskey 和csvalue(resourceid和version)进行注册。
更新上下文信息的能力。举一个例子,比如一个用户上传了一个资源文件test.jar,此时csserver已经有注册的信息,如果用户在编辑工作流的时候,将这个资源文件进行了更新,那么cs-server需要将这个内容进行更新。此时需要调用csclient的更新的接口
这个操作是基于以下的例子,比如一个widget节点和上游的sql节点是有很强的联动性,用户在sql节点中写了一个sql,sql的结果集的元数据为a,b,c三个字段,后面的widget节点绑定了这个sql,能够在页面中进行对这三个字段的编辑,然后用户更改了sql的语句,元数据变成了a,b,c,d四个字段,此时用户需要手动刷新一下才行。我们希望做到如果脚本做到了改变,那么widget节点能够自动的进行将元数据进行更新。这个一般采用的是listener模式,为了简便,也可以采用心跳的机制进行轮询。
用户一旦发布一个工程,就是希望对这个工程的所有信息进行类似于git打上一个tag,这里的资源文件、自定义变量这些都是不会再变的,但是有一些动态信息,如产生的结果集等还是会更新csid的内容。所以csclient需要提供一个csid1复制所有上下文信息的接口以供微服务进行调用
对于一个client而言,有时候会希望在尽快的时间内知道某一个csid和cskey在cs-server中发生了改变,例如visualis的csclient需要能够知道上一个sql节点进行了改变,那么需要被通知到,服务端有一个listener模块,而客户端也需要一个listener模块,例如一个client希望能够监听到某一个csid的某一个cskey的变化,那么他需要将该cskey注册到对应的csserver实例中的callbackEngine,后续的比如有另外一个client进行更改了该cskey的内容,第一个client进行了heatbeat的时候,callbackengine就需要将这个信息通知到已经client监听的所有cskey,这样的话,第一个client就知道了该cskey的内容已经发生了变化。当heatbeat返回数据的时候,我们就应该通知到注册到ContextClientListenerBus的所有的listener进行使用on方法