go - lambda处理程序回复后如何等待goroutine完成
问题描述
我正在用 Go 和 Aws Lambda 编写一个 slack 机器人。Slack 要求机器人在 3 秒内回复。但是,有时我不能让它回复得那么快,因为它正在与其他无服务器应用程序“交谈”以请求一些数据或分派任务。我以前从未使用过 goroutines,但我希望我可以实现这样的东西:
- Lambda 收到请求
- 机器人创建了一个 goroutine 来处理这个请求并对其采取相应的行动
- 处理程序不会等待所有这些操作完成,而是立即回复 200。
- Lambda 继续运行,直到 goroutine 完成。
我不确定这是否可能。
我已经阅读过sync.WaitGroup
,但我不确定如何将它与 main 函数结合在一起。我应该在处理程序中使用它吗?但我需要return
响应,这不是我可以包装到 goroutine 中的函数。
理想情况下,我希望处理程序立即回复,然后在后台处理 goroutine。
解决方案
请求完成后,不要尝试在 lambda 处理程序中执行任何操作。
更可靠的方法:
- 接听电话并记录所需的任何输入数据。
- 将数据放入 SQS
- 使用 HTTP 200 响应
- 另一个(SQS 触发)函数进行处理,如果需要,在记录时调用 Slack
response_url
推荐阅读
- android - 背景渐变导致色带
- angular - 我如何以角度进行验证,因此输入手杖仅采用模板方法中的数字
- c++ - 为什么 VS Debug 构建分配变量如此之远?
- java - 设置 SQL 语句参数值未正确替换为值
- python - 如何在另一个浏览器/移动设备上等待用户确认以允许继续
- laravel - Laravel 查询具有 3 个关系的数据透视表
- javascript - 如何发送对象数组作为道具?
- javascript - Jquery 计数不正确?
- python - 如何仅保留特定列的值存在于指定向量/系列中的行?
- amazon-web-services - S3 Batch:在同一区域的存储桶之间复制 1m 个对象的时间?