Google cloud dataflow Apache Beam模板:运行时上下文错误

Google cloud dataflow Apache Beam模板:运行时上下文错误,google-cloud-dataflow,google-cloud-pubsub,apache-beam,apache-beam-io,Google Cloud Dataflow,Google Cloud Pubsub,Apache Beam,Apache Beam Io,我目前正在尝试基于ApacheBeamSDK v2.1.0创建数据流模板,如 这是我的主课 public static void main(String[] args) { // Initialize options DispatcherOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(DispatcherOptions.class); // Create p

我目前正在尝试基于ApacheBeamSDK v2.1.0创建数据流模板,如

这是我的主课

    public static void main(String[] args) {

    // Initialize options
    DispatcherOptions options = PipelineOptionsFactory.fromArgs(args).withValidation().as(DispatcherOptions.class);

    // Create pipeline
    Pipeline pipeline = Pipeline.create(options);

    // Get messages
    PCollection<PubsubMessage> messages = pipeline.apply("ReadMain", PubsubIO.readMessages().fromSubscription(options.getSubscription()));

    }
命令如果我使用该方法,它将起作用

PubsubIO.readMessages().fromTopic(options.getTopic()));
但如果

PubsubIO.readMessages().fromSubscription(options.getSubscription()));
错误

[警告]
java.lang.RuntimeException:未从运行时上下文调用。
位于org.apache.beam.sdk.options.ValueProvider$RuntimeValueProvider.get(ValueProvider.java:223)
位于org.apache.beam.sdk.options.ValueProvider$NestedValueProvider.get(ValueProvider.java:131)
位于org.apache.beam.sdk.options.ValueProvider$NestedValueProvider.get(ValueProvider.java:131)
位于org.apache.beam.sdk.io.gcp.pubsub.pubsubunbounddsource.getSubscription(pubsubunbounddsource.java:1374)
在org.apache.beam.sdk.io.gcp.pubsub.pubsubundedsource$pubsubundedsource.(pubsubundedsource.java:1103)
位于org.apache.beam.sdk.io.gcp.pubsub.pubsubunbounddsource.expand(pubsubunbounddsource.java:1407)
位于org.apache.beam.sdk.io.gcp.pubsub.pubsubunbounddsource.expand(pubsubunbounddsource.java:110)
位于org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:514)
位于org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:454)
位于org.apache.beam.sdk.values.PBegin.apply(PBegin.java:44)
位于org.apache.beam.sdk.io.gcp.PubsubIO.PubsubIO$Read.expand(PubsubIO.java:730)
位于org.apache.beam.sdk.io.gcp.PubsubIO.PubsubIO$Read.expand(PubsubIO.java:536)
位于org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:514)
位于org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:473)
位于org.apache.beam.sdk.values.PBegin.apply(PBegin.java:56)
位于org.apache.beam.sdk.Pipeline.apply(Pipeline.java:180)
位于com.example.myclass.main(myclass.java:43)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
运行(Thread.java:748)

这看起来像是PubSubIO实现中的一个bug。我已经创建了跟踪此问题的程序。

该修补程序可用,效果非常好。我们可以将模板与fromSubscription一起使用
PubsubIO.readMessages().fromSubscription(options.getSubscription()));
[WARNING] 
java.lang.RuntimeException: Not called from a runtime context.
    at org.apache.beam.sdk.options.ValueProvider$RuntimeValueProvider.get(ValueProvider.java:223)
    at org.apache.beam.sdk.options.ValueProvider$NestedValueProvider.get(ValueProvider.java:131)
    at org.apache.beam.sdk.options.ValueProvider$NestedValueProvider.get(ValueProvider.java:131)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubUnboundedSource.getSubscription(PubsubUnboundedSource.java:1374)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubUnboundedSource$PubsubSource.<init>(PubsubUnboundedSource.java:1103)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubUnboundedSource.expand(PubsubUnboundedSource.java:1407)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubUnboundedSource.expand(PubsubUnboundedSource.java:110)
    at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:514)
    at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:454)
    at org.apache.beam.sdk.values.PBegin.apply(PBegin.java:44)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubIO$Read.expand(PubsubIO.java:730)
    at org.apache.beam.sdk.io.gcp.pubsub.PubsubIO$Read.expand(PubsubIO.java:536)
    at org.apache.beam.sdk.Pipeline.applyInternal(Pipeline.java:514)
    at org.apache.beam.sdk.Pipeline.applyTransform(Pipeline.java:473)
    at org.apache.beam.sdk.values.PBegin.apply(PBegin.java:56)
    at org.apache.beam.sdk.Pipeline.apply(Pipeline.java:180)
    at com.example.myclass.main(MyClass.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:282)
    at java.lang.Thread.run(Thread.java:748)