知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个golang开发实战,手把手教大家学习《client.等待标头时超时》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回
知识点掌握了,还需要不断练习才能熟练运用。下面编程网给大家带来一个golang开发实战,手把手教大家学习《client.等待标头时超时》,在实现功能的过程中也带大家重新温习相关知识点,温故而知新,回头看看说不定又有不一样的感悟!
问题内容我有一个用 Go 编写的 lambda,它与 aws 中应用程序负载均衡器后面的轻量级 Http 应用程序进行通信:
package main
import (
"io/ioutil"
"log"
"net/http"
"os"
"time"
)
func main() {
for {
req, err := http.NewRequest("GET", "http://my-app-12345.us-east-1.elb.amazonaws.com:8080", nil)
if err != nil {
log.Fatal("Error reading request. ", err)
}
req.Header.Set("Load-Rate", os.Getenv("LOAD"))
client := &http.Client{Timeout: time.Second * 10}
resp, err := client.Do(req)
if err != nil {
log.Fatal("Error reading response. ", err)
}
if resp.StatusCode == http.StatusOK {
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
bodyString := string(bodyBytes)
log.Println(bodyString)
}
time.Sleep(time.Duration(10) * time.Millisecond)
}
}
我已经在 lambda 和 alb 使用的安全组中的所有端口上打开了全球访问权限,并且我可以从我的家用计算机上很好地卷曲端点。但是,当我尝试在 lambda 中运行此命令时,我在 cloudwatch 日志中收到以下内容:
2020-06-04t07:06:31.028-05:00 进程在完成之前退出 要求 2020-06-04t07:06:41.100-05:00 2020/06/04 12:06:41 错误 阅读回应。得到 http://my-app-12345.us-east-1.elb.amazonaws.com:8080: net/http:等待连接时请求被取消 (等待标头时超出了 client.timeout) 2020-06-04t07:06:41.101-05:00 2020/06/04 12:06:41 退出状态 1
我很难确定这是 go 问题还是我在 aws 中的某些配置错误。我对 go 在这里抛出的错误不太熟悉。
自从您写了有关其安全组以来,您的 lambda 似乎位于 VPC 中。如果是这种情况,那么超时的最可能原因是VPC 中的 lambda 没有互联网访问权限,也没有公共 IP,即使它位于公共子网中。
来自docs:
将函数连接到公共子网不会为其提供 Internet 访问权限或公共 IP 地址。
由于您的 ALB 是公共的(您从家里卷曲它),您的 lambda 无法访问它,即使它们位于同一子网中也是如此。
要纠正此问题,您必须使用正确的路由设置 NAT 网关或实例,以便能够从 VPC 中的 lambda 与您的公共 ALB 进行通信,并将您的 lambda 置于私有子网中。
好了,本文到此结束,带大家了解了《client.等待标头时超时》,希望本文对你有所帮助!关注编程网公众号,给大家分享更多Golang知识!
--结束END--
本文标题: client.等待标头时超时
本文链接: https://lsjlt.com/news/596186.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-05
2024-04-05
2024-04-05
2024-04-04
2024-04-05
2024-04-05
2024-04-05
2024-04-05
2024-04-04
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0