Как я могу предотвратить использование сообщения в не продвигаемом экземпляре? - PullRequest
1 голос
/ 01 ноября 2019

Всякий раз, когда я развертываю новую версию в Google App Engine и пересылаю на нее трафик, предыдущая версия по-прежнему использует сообщения от нашего брокера сообщений. Как я могу убедиться, что только недавно развернутая версия будет использовать сообщения, не закрывая старые экземпляры?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2019

Если у вас развернуто несколько версий во время миграции трафика, вы можете проверить текущую версию с помощью Modules API и сравнить ее с версией по умолчанию.

Ваша проверка может выглядеть как-тонапример:

from google.appengine.api import modules

def default_version = modules.get_default_version()
def instance_version = modules.get_current_version_name()

# you may additionally want to query the instances of the default version 
# to make sure they've booted up and are actively serving traffic.

if default_version != instance_version:
  # don't consume messages

В приведенном выше примере кода версия по умолчанию - это версия трафика, на которую выполняется миграция, а текущая версия - версияэкземпляр.

См. также Использование API модулей .

Примечание. Службы ранее назывались модулями, а методы API все еще отражают это наименование.

0 голосов
/ 01 ноября 2019

Во время развертывания вашей службы вы можете использовать опции --promote и --stop-previous-version.

https://cloud.google.com/sdk/gcloud/reference/app/deploy

Однако, как правило, лучше постепенно выполнять миграциюдвижение. Это касается как пользователей, так и внутренних сервисов. Поскольку вы не можете развернуть две службы одновременно, представьте, что развертывание GAE задерживается на несколько секунд. Ожидаете ли вы, что сообщения будут использоваться вашей запущенной службой, которая заменяется? Таким образом, не должно иметь значения, если несколько сообщений все еще были перенаправлены на старый экземпляр во время миграции трафика. Это был бы правильный дизайн.

...