二开微服务与集成文档修改记录版本日期编制/修订审核批准修改原因V1.02021-09-01张天越吴宏超郭玲1.适用背景依赖集成云现有的基础设施无法满足业务需要,需要现场二次开发与集成云配合实现业务,可以以本文为参考进行初级配置。下文从登记一个二开微服务到服务流程内引入微服务资源进行介绍。2.怎么注册一个二开微服务?注册一个二开微服务需要满足平台的要求,需要三个类,服务工厂类、接口类和实现类,三个类可以部署在相同的包下,也可以部署在不同的包下,但是一定要部署在同一个应用下。二开微服务可以部署在标准应用下,也可以部署在二开应用下,部署的应用id很重要,是二开微服务标识的一部分。举例:如果部署在集成云下,应用id是iscb;如果部署在供应链下,应用id是scm;如果部署在二开的应用下,那对应实际命名的id即可。3.二开的微服务代码应该怎么写?本文以在集成云应用下部署一个二开微服务为例,部署包路径为kd.isc.iscb.micro。目录结构如图,从上至下分别是工厂类、接口类、实现类。工厂类:ServiceFactoryServiceFactorypublicclassServiceFactory{privatestaticMapserviceMap=newHashMap<>();//存放微服务的mapstatic{//key是接口名,value是实现类全限定名serviceMap.put("TestService","kd.isc.iscb.micro.TestServiceImpl");}//getService()平台要求的固定写法,一般情况下无须更改publicstaticObjectgetService(StringserviceName){StringclassName=serviceMap.get(serviceName);if(className==null){thrownewIllegalArgumentException(String.format("%s对应的服务实现未找到",serviceName));}else{returnTypesContainer.getOrRegisterSingletonInstance(className);}}}接口类:TestServiceTestServicepublicinterfaceTestService{StringsayHello(Stringmsg);//微服务接口1MapgetParams(Mapparams);//微服务接口2}实现类:TestServiceImplTestServiceImpl//接口实现方法publicclassTestServiceImplimplementsTestService{@OverridepublicStringsayHello(Stringmsg){returnthis.getClass().getName()+":say"+msg;}@OverridepublicMapgetParams(Mapparams){Mapresult=newHashMap<>(4);result.put("id",null);result.put("type","NOP");result.put("errorMessage",this.getClass().getName()+"invoked.params:"+params);returnresult;}}4.部署好的微服务怎么调用?按照以上步骤注册好二开微服务后,该微服务在部署的苍穹下任何应用内都可以调用,以下提出两种调用场景供参考。Java代码调用:DispatchServiceHelper.invokeService("kd.isc.iscb.micro@isv","iscb","TestService","sayHello","这是DEMO样例")集成云内脚本调用:invokeMicroService("kd.isc.iscb.micro@isv","iscb","TestService","sayHello","这是DEMO样例")5.二开的微服务部署后如何登记到集成云?二开微服务登记好之后可以通过集成云登记苍穹微服务免去写脚本这一步,通过界面化配置可以完成调用。进入集成云菜单,通过集成管理->API集成->苍穹微服务登记,如图配置,现场需要根据实际情况灵活改动。其中需要注意的是,云ID或工厂类前缀,这里填的是工厂类的路径,由于demo是部署在集成云应用下,所以应用id填iscb,服务名称填接口名称,方法名本例填sayHello的demo方法,可以输出类名和输入的字符串,点击测试可以看到结果,因此成功将微服务登记到集成云。更多参考:https://club.kdcloud.com/school/146908884114761216测试结果:6.如何在服务流程中调用微服务?新建一个服务流程如图,资源中引入上一步登记的苍穹微服务,变量新增两个字符串输入input,输出result。此时调用微服务既可以通过脚本节点也可以通过API调用节点,脚本节点直接通过别名isv(input)即可,下文简单介绍下引入API调用节点,流程图配置如下:通过【对输入变量赋值】节点对input参数赋值,通过对【API调用】节点调用登记的微服务,配置如下图:此时流程跑通,表示微服务已经成功登记调用。