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