Java 后端在生成式服务中的主要工作可以分为以下几个部分:

GraphQL 接口层:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 1. 在 schema.graphqls 中定义接口
servicenameSimplify(
privateUserId: ID!,
metadata: SimpleXXXContentMetadata!
): Content!

// 2. 实现对应的 Resolver
public class ContentMutationResolver {
public Content videoLipSyncSimplify(
String privateUserId,
SimpleAudio2VideoContentMetadata metadata
) {
// 验证用户和权限
// 创建任务上下文
// 创建内容记录
}
}

内容元数据管理:

1
2
3
4
5
6
7
8
9
10
11
12
// 创建特定服务的元数据类
public class StablePawXXXContentMetadata {
// 配置媒体参数
private Integer frameRate;
private Integer duration;
private String inputPath;
private String outputPath;

// 处理用户输入(图片、音频、视频)
protected File srcImageFile;
protected File srcAudioFile;
}

工作流解析器:

1
2
3
4
5
6
7
8
9
10
11
public class XXXWorkflowParser extends BasicWorkflowParser {
public void init() {
// 加载工作流 JSON 配置
// 设置输入节点映射
// 配置媒体路径和参数
}

public void setSourceMedia(String path) {
// 设置输入媒体路径
}
}

任务执行器:

1
2
3
4
5
6
7
8
@Component
public class StablePawXXXExecutor {
public void execute(String contentId, String modelId, String contentMetadataUrl) {
// 获取任务信息
// 发送生成请求到 Python 服务
// 管理任务状态和进度
}
}

回调处理:

1
2
3
4
5
6
7
8
9
10
@RestController
public class ContentGenerationCallbackController {
@PostMapping("/callback/content/event")
public void handleCallback(ContentGenerationCallback callback) {
// 获取任务和内容信息
// 根据内容类型获取对应处理器
// 处理生成结果
// 更新任务状态
}
}

创建上下文:

1
2
3
4
5
6
7
8
9
10
11
12
public class XXXCreationContext {
// 计算积分消耗
public int costAmount() {
return calculateCreditCost();
}

// 实现业务逻辑
public void init(User user, Model model, Metadata metadata) {
// 初始化上下文
// 设置参数
}
}

创建处理器:

1
2
3
4
5
6
7
8
9
10
public class XXXCreationHandler {
// 管理内容生成生命周期
public void handle() {
// 准备元数据
// 补充数据
// 执行生成过程
// 文件预处理
// 进度和资源管理
}
}

核心职责:

  1. 提供 GraphQL API 接口
  2. 管理用户认证和授权
  3. 处理元数据生成和存储
  4. 协调任务执行流程
  5. 处理服务回调响应
  6. 管理内容生成生命周期
  7. 实现业务逻辑和规则

数据存储:

  1. MySQL 存储基础数据
  2. DynamoDB 存储服务元数据
  3. Redis 缓存处理结果

异常处理:

  1. 任务执行异常处理
  2. 回调失败处理
  3. 资源清理机制
  4. 日志记录和监控

与其他组件的交互:

  1. 调用 Python 服务进行内容生成
  2. 使用 S3 存储生成的文件
  3. 通过 SQS 接收状态回调
  4. 访问 DynamoDB 存储元数据