2021SC@SDUSC(dolphinscheduler-api)

本文介绍了Dolphinscheduler-api的API接口层,重点分析了启动入口和ProcessDefinitionController。启动入口包含ApiApplicationServer和CombinedApplicationServer,后者额外启动LoggerServer和AlertServer。ProcessDefinitionController涉及14个接口,处理流程定义相关操作,通过ProcessDefinitionService处理业务逻辑。文章指出,控制器和服务之间的职责划分可以更加清晰。

dolphinscheduler-api

API接口层,主要负责处理前端UI层的请求。该服务统一提供RESTful api向外部提供请求服务。 接口包括工作流的创建、定义、查询、修改、发布、下线、手工启动、停止、暂停、恢复、从该节点开始执行等等。

涉及的API太多,不宜深入研究,只研究其大致框架、功能。具体的API列表及其使用方法可查看官方文档

启动入口

org.apache.dolphinscheduler.api下面有两个类:ApiApplicationServer、CombinedApplicationServer。

从ApiApplicationServer来看就是启动一个SpringBoot应用。

CombinedApplicationServer除了启动一个SprintBoot应用之外,还启动了LoggerServer、AlertServer。

CombinedApplicationServer与ApiApplicationServer的区别:是否内嵌LoggerServer、AlertServer。而且当server.is-combined-server为true时,会自动启动CombinedApplicationServer。

对于SpringBoot应用,接口一般都在controller中。org.apache.dolphinscheduler.api.controller包有以下几个Controller: AccessTokenController ProcessInstanceController AlertGroupController ProjectController BaseController QueueController DataAnalysisController ResourcesController DataSourceController SchedulerController ExecutorController TaskInstanceController LoggerController TaskRecordController LoginController TenantController MonitorController UsersController ProcessDefinitionController WorkerGroupController

因为在DolphinScheduler调度中最重要的一个概念就是流程定义,所以我们从ProcessDefinitionController入手简要分析这个模块的基本功能。

ProcessDefinitionController

在官方文档中,可以看到org.apache.dolphinscheduler.api.controller.ProcessDefinitionController大概有14个接口。

ProcessDefinitionController中只有一个字段ProcessDefinitionService,从名称以及自身经验来看,可以知道ProcessDefinitionController会负责HTTP请求的参数解析、参数校验、返回值等等,与业务无关的逻辑;具体的业务逻辑会交给ProcessDefinitionService类处理。

由此我们可以类比分析其他所有的controller,都会有一个对应的service处理业务相关的逻辑。

 上面是createProcessDefinition的源码,逻辑比较清晰,就是接收、校验HTTP的参数,然后调用processDefinitionService.createProcessDefinition函数,返回结果、处理异常。

但这段代码有一个controller与service分隔不清的地方:HTTP返回的结果由谁处理。此处返回结果是由service负责的,service会创建一个Map<String, Object>类型的result字段,然后调用result.put("processDefinitionId",processDefine.getId());设置最终返回的数据。其实个人是不敢苟同这种做法的,严格来说,service只返回与业务相关的实体,HTTP具体返回什么信息应该交由controller处理。

### 2021 SC SDUSC IT相关信息 #### ByteToMessageDecoder解析 `ByteToMessageDecoder` 是Netty框架中的一个重要解码器类,用于处理字节流到消息对象的转换过程。此类实现了入站处理器接口,在接收到的数据被读取之后触发调用方法来执行具体的解码逻辑[^1]。 ```java public abstract class ByteToMessageDecoder extends ChannelInboundHandlerAdapter { protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception; } ``` 该类提供了一个抽象方法 `decode()` ,子类需实现此方法完成特定的应用层协议解析工作。当有新的数据到达时会自动调用这个函数来进行逐步解码操作直到所有可用输入都被消耗完毕为止。 #### 后端文件夹sdudoc-mbg分析 针对项目后端部分中名为 `sdudoc-mbg` 的模块进行了深入探讨。这部分主要涉及数据库映射生成工具MyBatis Generator (MBG),它能够自动生成持久化所需的Java实体类以及相应的DAO访问代码,大大提高了开发效率并减少了手工编写重复SQL语句的工作量[^2]。 #### 数据结构定义EVP_CIPHER_CTX 在OpenSSL库中存在一种称为 `EVP_CIPHER_CTX` 的数据类型,其实际是一个指向内部结构体指针类型的别名声明。这种上下文环境主要用于加密算法的操作过程中保存状态信息和其他必要的参数设置等[^3]: ```c typedef struct evp_cipher_ctx_st EVP_CIPHER_CTX; ``` 上述代码片段展示了如何通过宏定义的方式创建一个新的类型名称以便于后续编程使用更加直观易懂。 #### Senta输入变量说明 Senta作为自然语言处理平台之一,在接收外部传入的数据时支持多种基础数值型张量形式作为模型训练样本集的一部分。具体来说就是允许用户指定维度大小不固定的矩阵或者向量,并且限定了所含元素仅能采用浮点数或整数两种基本类别以确保计算精度满足需求[^4]。 #### 组件特性描述 为了增强系统的灵活性和健壮性,某些组件设计上融入了几项重要的机制:日志记录能力使得开发者可以在运行期间获取详细的调试线索;配置管理则让用户可以根据实际情况调整行为模式而无需修改源代码本身;资源清理功能保证了即使发生异常也能安全地终止程序而不遗留未关闭的对象实例;最后循环利用策略有助于降低垃圾收集频率进而优化整体性能表现并缓解潜在内存压力问题[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值