跳到主要内容

SDK Connector 开发指南

⚠️ 注意:如果你不了解connector,请先快速浏览下http-connector,会告诉你connector如何使用。

SDK Connector 是一种插件式 connector,由 connectorTypeaction 两部分组成:

  • connectorType:描述插件并执行初始化工作
  • action:利用初始化信息执行具体操作
  • Base:请选择sdk
  • 性能:请尽量使用缓存

关于 connectorTypeaction 的详细定义、使用方法及基础配置,请参考 http-connector 相关文档。


SDK Connector 开发方式

SDK Connector 的开发有两种方式:

  1. 使用 GitHub 提供的 Maven Archetype 项目(推荐 Java 开发者)
  2. 直接上传第三方 JAR 包

推荐方式一,优势包括:

  • 打包时自动引入依赖 JAR
  • 在本地 IDE(如 IntelliJ IDEA)中开发调试方便
  • 项目结构更规范

方式一:使用 GitHub Maven Archetype 创建 SDK Connector(推荐)

项目地址: https://github.com/zljxh/ceta-archetype-plugin

请先阅读仓库中的 README.md 文件,其中说明了:

  • 如何构建 plugin 项目
  • 构建后的项目中 README.md 指导如何创建 connectorTypeaction

方式二:直接上传第三方 JAR 包

如果选择直接上传第三方 JAR 包,请注意:

⚠️ 注意:如果该 JAR 的 POM 中依赖其他 JAR,ceta-connector 不会自动加载,你需要将所有依赖包一起上传。

1. 构建 connectorType

⚠️ 注意:为了性能,请尽量使用缓存,cache,expires,timeUnit在http-connector篇有介绍。

编写 connectorType 用于描述插件并进行初始化工作。
例如:

return [
"cache": true,
"expires": 15000,
"timeUnit": "HOURS",
executeScriptResult: [
"accessKey": inputs.accessKey,
"secretKey": inputs.secretKey
]
]

示例截图: sdk-connector-type-script


2. 构建 action

根据 connectorType 初始化信息实现实际业务逻辑。例如:

import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.core.sync.RequestBody;
import java.nio.file.Path;
import software.amazon.awssdk.regions.Region;

// connectorInstance 是 ConnectorInstance.buildInstance 的返回值
def accessKey = connectorInstance.executeScriptResult.accessKey
def secretKey = connectorInstance.executeScriptResult.secretKey

AwsBasicCredentials credentials = AwsBasicCredentials.create(accessKey, secretKey)
StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create(credentials)

S3Client s3 = S3Client.builder()
.region(Region.AP_SOUTHEAST_1)
.credentialsProvider(credentialsProvider)
.build()

try {
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
.bucket(inputs.bucketName)
.key(inputs.keyName)
.build()

s3.putObject(putObjectRequest, RequestBody.fromFile(Path.of(inputs.filePath)))
} finally {
s3.close()
}

示例截图: sdk-action-script