Google cloud dataflow 谷歌云数据流PubSubIO不';不要从一个完整的话题开始阅读

Google cloud dataflow 谷歌云数据流PubSubIO不';不要从一个完整的话题开始阅读,google-cloud-dataflow,google-cloud-pubsub,Google Cloud Dataflow,Google Cloud Pubsub,我试图在Google云数据流中以“流”模式运行一个管道。 管道应该从PubSub主题中读取,但是在管道启动后我删除它、重新创建它并将所有消息重新发布到该主题之前,它实际上不会从该主题中读取 有没有办法让管道读取已发布的消息?听起来,提供发布/订阅(更多详细信息请参见)可以解决您的问题。创建订阅后,消息将被缓冲,允许在管道启动时读取这些消息。听起来提供发布/订阅(中的更多详细信息)可以解决您的问题。订阅创建后,消息将被缓冲,允许在管道启动时读取这些消息。请使用云控制台在发布订阅中创建自定义订阅。

我试图在Google云数据流中以“流”模式运行一个管道。 管道应该从PubSub主题中读取,但是在管道启动后我删除它、重新创建它并将所有消息重新发布到该主题之前,它实际上不会从该主题中读取


有没有办法让管道读取已发布的消息?

听起来,提供发布/订阅(更多详细信息请参见)可以解决您的问题。创建订阅后,消息将被缓冲,允许在管道启动时读取这些消息。

听起来提供发布/订阅(中的更多详细信息)可以解决您的问题。订阅创建后,消息将被缓冲,允许在管道启动时读取这些消息。

请使用云控制台在发布订阅中创建自定义订阅。 在代码中,请尝试以下内容

 PCollection<TableRow> datastream = p.apply(PubsubIO.Read.named("Read device iot data from PubSub")

            .subscription(String.format("projects/%s/subscriptions/%s",<ProjectId>,<Subscriptionname>))

            .timestampLabel("ts")
            .withCoder(TableRowJsonCoder.of()));
PCollection datastream=p.apply(PubsubIO.Read.named(“从PubSub读取设备物联网数据”)
.subscription(String.format(“项目/%s/订阅/%s”、)
.时间标签(“ts”)
.withCoder(TableRowJsonCoder.of());
请注意,当您订阅时,您可以订阅主题或订阅名称

在上面的代码中,我订阅了我在发布子控制台中显式创建的订阅。
使用显式订阅的优点是,即使您的数据流代码处于脱机状态,它也会存储从发布订阅中提取的数据。因此数据不会丢失。

请使用云控制台在发布订阅中创建自定义订阅。 在代码中,请尝试以下内容

 PCollection<TableRow> datastream = p.apply(PubsubIO.Read.named("Read device iot data from PubSub")

            .subscription(String.format("projects/%s/subscriptions/%s",<ProjectId>,<Subscriptionname>))

            .timestampLabel("ts")
            .withCoder(TableRowJsonCoder.of()));
PCollection datastream=p.apply(PubsubIO.Read.named(“从PubSub读取设备物联网数据”)
.subscription(String.format(“项目/%s/订阅/%s”、)
.时间标签(“ts”)
.withCoder(TableRowJsonCoder.of());
请注意,当您订阅时,您可以订阅主题或订阅名称

在上面的代码中,我订阅了我在发布子控制台中显式创建的订阅。
使用显式订阅的好处是,即使数据流代码处于脱机状态,它也会存储从发布订阅中提取的数据。因此数据不会丢失。

太好了。就是它。谢谢你。就是它。谢谢