Google cloud dataflow 关于数据流远程执行和apache beam反序列化的混淆?

Google cloud dataflow 关于数据流远程执行和apache beam反序列化的混淆?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我正在查看以下代码,其中参数从客户端微服务传递到GCP中的数据流远程作业 LaunchTemplateParameters launchTemplateParameters = new LaunchTemplateParameters() .setEnvironment(runtimeEnvironment) .setJobName(jobName) .setParameters(se

我正在查看以下代码,其中参数从客户端微服务传递到GCP中的数据流远程作业

        LaunchTemplateParameters launchTemplateParameters = new LaunchTemplateParameters()
                .setEnvironment(runtimeEnvironment)
                .setJobName(jobName)
                .setParameters(serializableParams);
我注意到所有serializableParams都是字符串键和字符串值,但是在apache beam的读取端,我看到一个对象以某种方式被“反序列化”。以下是apache beam中的PipelineOptions对象

public interface RosterPipelineOptions extends DataflowPipelineOptions {
    @Description("The GCP bucket to read from")
    ValueProvider<String> getInputBucket();

    void setInputBucket(ValueProvider<String> value);

    @Description("Prefix of the roster file")
    ValueProvider<RosterTypeEnum> getRosterType();

    void setRosterType(ValueProvider<RosterTypeEnum> value);

    @Description("Client Id")
    ValueProvider<String> getClientId();

    void setClientId(ValueProvider<String> value);
}
公共接口RosterPipelineOptions扩展了DataflowPipelineOptions{
@说明(“要读取的GCP存储桶”)
ValueProvider getInputBucket();
void setInputBucket(ValueProvider值);
@说明(“名册文件的前缀”)
ValueProvider getRosterType();
void setRosterType(ValueProvider值);
@说明(“客户Id”)
ValueProvider getClientId();
void setClientId(ValueProvider值);
}
客户端api和服务器api中的序列化和反序列化可能会以不对称结束,这意味着应用程序开发人员以一种方式序列化,服务器以另一种方式反序列化。ApacheBeam如何将其反序列化到RosterTypeEnum对象中

更好的是,是否有一个对称的API客户端,我们可以向其提供jackson/gson类型的对象,然后进行序列化?或者我只需要知道反序列化技术,然后在客户端使用它进行序列化

更多信息在这里将是伟大的

我更习惯于这样的客户端API

  • 调用客户端api
  • 框架中的客户端impl使用jackson序列化
  • 服务器脚手架使用jackson反序列化
  • 我的代码再次使用该对象
因此,如果平台修改为GRPC或任何协议,我并不在意,但上面的代码似乎更像这样

  • 应用程序开发人员序列化为字符串
  • 使用字符串调用客户端impl
  • 平台将字符串反序列化为对象
  • 应用程序开发人员代码现在读取对象
这似乎是错误的,我想知道是否有一个更好的API更对称,因为这会导致有用的东西以后(至少对我们来说)