Dataflow中从PubSub读取:设置订阅名称

Read from PubSub in Dataflow: set the subscription name

我是我的管道 (Java) 我已经设置了使用订阅或主题从 pubsub 读取的选项:

    PCollection<PubsubMessage> messages = null;
    if (options.getUseSubscription()) {
        messages = pipeline.apply("ReadPubSubSubscription", PubsubIO.readMessagesWithAttributes()
                .fromSubscription(options.getInputSubscription()).withIdAttribute("messageId"));
    } else {
        messages = pipeline.apply("ReadPubSubTopic", PubsubIO.readMessagesWithAttributes()
                .fromTopic(options.getInputTopic()).withIdAttribute("messageId"));
    }

如果您使用主题选项,每次您 运行 您的管道,都会创建一个新的订阅。

有什么办法可以避免吗?也许设置从 Dataflow 自动创建的订阅的名称?

我认为 Dataflow 不支持此类功能,因为此类信息不会在 Dataflow 管道之间共享。如果您使用 fromTopic() 选项,Dataflow 将在读取时创建一个订阅。但是,如果用户没有提供并使用它,您是否可以在管道提交期间预先创建订阅?

不,你不能这样做。但在启动管道之前,您可以手动自定义选项对象,例如,您可以创建或恢复订阅,将其添加到选项中,然后执行您的管道。