如果我有以下代码,会发生什么不好的事情吗?它将尝试创建新的订阅吗? 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()
我需要能够根据人们创建新订阅的时间来更新订阅。这种方法有什么问题吗?
答案 0 :(得分:1)
您应该避免为相同的订阅重复调用“订阅”-即使您极有可能不会增加传递的重复消息的数量,但是您将创建接收基础结构的多个实例。这既效率低下,又破坏了Pub / Sub提供的某些流控制属性,因为这些属性仅根据订户的实例进行计算。也就是说,例如,这可能会导致您的订阅者作业耗尽内存并失败。
相反,我建议您跟踪已创建的订户。请注意,“订阅”方法返回的将来可用于此目的,或在必要时取消接收消息。您可以在documentation上找到更多详细信息。