Как ждать завершения работы goroutine после того, как обработчик лямбды ответил - PullRequest
2 голосов
/ 13 июня 2019

Я пишу слабый бот с Go и Aws Lambda. Slack требует, чтобы бот ответил в течение 3 секунд. Однако иногда я не могу заставить его отвечать так быстро, потому что он «общается» с другими безсерверными приложениями для запроса некоторых данных или диспетчеризации задач. Я никогда раньше не работал с программами, но я надеялся, что смогу реализовать что-то вроде этого:

  1. Лямбда получает запрос
  2. Бот создает программу, которая обработает этот запрос и будет действовать в соответствии с ним
  3. Обработчик не ждет завершения всех этих действий, а сразу отвечает 200.
  4. Лямбда продолжает работать до тех пор, пока не закончится горутин.

Я не уверен, возможно ли это.

Я читал о sync.WaitGroup, но я не уверен, как включить его в основную функцию. Должен ли я использовать его внутри обработчика? Но мне нужно return ответить, и это не та функция, которую я могу превратить в программу.

В идеале, я бы хотел, чтобы обработчик сразу ответил, а затем обработал goroutine в фоновом режиме.

1 Ответ

1 голос
/ 13 июня 2019

Не пытайтесь что-либо делать в своем лямбда-обработчике после завершения запроса.

Более надежный подход:

  1. Примите вызов и запишите все необходимые входные данные.
  2. Поместить данные в SQS
  3. Ответить с HTTP 200
  4. Другая (запускаемая SQS) функция выполняет обработку и при необходимости вызывает Slack для записи response_url
...