如果我多次订阅同一主题会怎样? (Python,Google Pubsub)

时间:2019-05-23 18:45:16

标签: python google-cloud-platform google-cloud-pubsub

如果我有以下代码,会发生什么不好的事情吗?它将尝试创建新的订阅吗? subscribe是幂等操作吗?

subscriber = pubsub_v1.SubscriberClient()

def f(msg):
    print(msg.data)
    print(msg)
    msg.ack()

def create_subscriptions():
  restults = [] # some sql query
  for result in results:
    path = self.subscriber.subscription_path('PROJECT', result)
    subscriber.subscribe(self.path, callback=f)

while True:
    time.sleep(60)
    create_subscriptions()

我需要能够根据人们创建新订阅的时间来更新订阅。这种方法有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您应该避免为相同的订阅重复调用“订阅”-即使您极有可能不会增加传递的重复消息的数量,但是您将创建接收基础结构的多个实例。这既效率低下,又破坏了Pub / Sub提供的某些流控制属性,因为这些属性仅根据订户的实例进行计算。也就是说,例如,这可能会导致您的订阅者作业耗尽内存并失败。

相反,我建议您跟踪已创建的订户。请注意,“订阅”方法返回的将来可用于此目的,或在必要时取消接收消息。您可以在documentation上找到更多详细信息。