Что произойдет, если я подпишусь на одну и ту же тему несколько раз? (Python, Google Pubsub) - PullRequest
0 голосов
/ 23 мая 2019

Если у меня будет следующий код, случится ли что-нибудь плохое? Будет ли пытаться создать новые подписки? 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 Ответ

1 голос
/ 24 мая 2019

Вам следует избегать повторного вызова «подписка» на одну и ту же подписку - даже если вы, скорее всего, не увеличите количество доставляемых дублирующих сообщений, вы бы создали несколько экземпляров принимающей инфраструктуры.Это неэффективно и лишает некоторые свойства управления потоком, которые предоставляет Pub / Sub, так как они вычисляются только для экземпляра подписчика;то есть это может привести к тому, что заданию вашего подписчика не хватит памяти и произойдет сбой, например.

Вместо этого я бы предложил отслеживать, каких подписчиков вы уже создали.Обратите внимание, что метод «подписки» возвращает будущее, которое вы можете использовать для этой цели или для отмены получения сообщения при необходимости.Вы можете найти более подробную информацию о документации .

...