如何在 lambda 处理程序回复后等待 goroutine 完成
How to wait for goroutine to finish after lambda handler has replied back
我正在使用 Go 和 Aws Lambda 编写一个 slack 机器人。 Slack 要求机器人在 3 秒内回复。但是,有时我不能让它回复得那么快,因为它 "talking" 到其他无服务器应用程序请求一些数据或调度任务。我以前从未使用过 goroutines,但我希望我可以实现这样的东西:
- Lambda 收到一个请求
- 机器人创建一个 goroutine 来处理这个请求并据此采取行动
- 处理程序不会等待所有这些操作完成,而是立即回复 200。
- Lambda 继续 运行 直到 goroutine 完成。
我不确定这是否可能。
我读过 sync.WaitGroup
,但我不确定如何将它与 main 函数合并。我应该在处理程序中使用它吗?但是我需要 return
响应,这不是我可以包装到 goroutine 中的函数。
理想情况下,我希望处理程序立即回复,然后在后台处理 goroutine。
不要在请求完成后尝试在您的 lambda 处理程序中执行任何操作。
更可靠的方法:
- 接听电话并记录所需的任何输入数据。
- 将数据放入SQS
- 响应 HTTP 200
- 另一个(SQS 触发的)函数进行处理,如果需要,在记录时调用 Slack
response_url
我正在使用 Go 和 Aws Lambda 编写一个 slack 机器人。 Slack 要求机器人在 3 秒内回复。但是,有时我不能让它回复得那么快,因为它 "talking" 到其他无服务器应用程序请求一些数据或调度任务。我以前从未使用过 goroutines,但我希望我可以实现这样的东西:
- Lambda 收到一个请求
- 机器人创建一个 goroutine 来处理这个请求并据此采取行动
- 处理程序不会等待所有这些操作完成,而是立即回复 200。
- Lambda 继续 运行 直到 goroutine 完成。
我不确定这是否可能。
我读过 sync.WaitGroup
,但我不确定如何将它与 main 函数合并。我应该在处理程序中使用它吗?但是我需要 return
响应,这不是我可以包装到 goroutine 中的函数。
理想情况下,我希望处理程序立即回复,然后在后台处理 goroutine。
不要在请求完成后尝试在您的 lambda 处理程序中执行任何操作。
更可靠的方法:
- 接听电话并记录所需的任何输入数据。
- 将数据放入SQS
- 响应 HTTP 200
- 另一个(SQS 触发的)函数进行处理,如果需要,在记录时调用 Slack
response_url