Тестирование нескольких сервисов AppEngine с очередями задач - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть приложение AppEngine с двумя службами, где служба A ставит задачи в очередь для службы B, используя очередь задач (push).Как я могу проверить это с помощью сервера разработки?При запуске нескольких служб с сервером разработки каждая служба получает уникальный номер порта, и очередь задач не может разрешить URL-адрес, поскольку целевой URL-адрес фактически работает на другом порту, т. Е. Служба A находится на порту 8080, а служба B включена.порт 8081. Все это прекрасно работает на производстве, где все находится на одном и том же порту, но как мне проверить это локально?

1 Ответ

0 голосов
/ 27 ноября 2018

Конфигурация принудительной очереди позволяет указать целевую службу по имени, которое понимает сервер разработки.С Синтаксис :

target (push-очереди)

Необязательно.Строка с именем службы / версии, версии внешнего интерфейса или серверной части, для которой выполняются все задачи, поставленные в очередь в этой очереди.

Строка добавляется к имени домена вашего приложения при создании HTTPзапрос на задание.Например, если идентификатор вашего приложения равен my-app , а для цели установлено значение my-version.my-service , имя хоста URL будет установлено на my-version.my-service.my-app.appspot.com .

Если цель не указана, то задачи вызываются в той же версии приложения, в которой они были поставлены в очередь.Таким образом, если вы поставили задачу в очередь из версии приложения по умолчанию, не указав цель в очереди, задача вызывается в версии приложения по умолчанию.Обратите внимание, что если версия приложения по умолчанию изменяется между временем постановки задачи в очередь и временем ее выполнения, то задача будет выполняться в новой версии по умолчанию.

Если вы используете службы вместе с файл отправки , HTTP-запрос вашей задачи может быть перехвачен и перенаправлен в другую службу.

Например, базовый queue.yaml будет выглядеть следующим образом:

queue:

- name: service_a
  target: service_a

- name: service_b
  target: service_b

Я не уверен на 100%, достаточно ли одного этого, лично я также использую файл dispatch.yaml, так как мне нужно направлять запросы, отличные от задач.Но для этого вам нужно иметь четко определенный шаблон в URL, так как шаблоны на основе имени хоста не поддерживаются на сервере разработки.Например, если запросы Службы A используют /service_a/... пути, а Служба B использует /service_b/... пути, то это бы сработало:

dispatch:

- url: "*/service_a/*"
  service: service_a

- url: "*/service_b/*"
  service: service_b

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

...