google-app-engine - 上游从上游读取响应标头时过早关闭连接,客户端:
问题描述
我会很感激一些帮助。我已经在 Google App Engine 上部署了 Go。服务器关闭了一段时间,这意味着我们无法获取消息。触发器来自上游过早关闭的连接,同时从上游读取响应标头,客户端:错误:
2019/10/27 08:25:26 [error] 23#23: *166 upstream prematurely closed connection while reading response header from upstream, client: 169.x.x.x, server: _, request: "POST /api/v2/money/topup HTTP/1.1", upstream: "http://127.0.0.1:8081/api/v2/money/topup", host: “x.x.x”
{
insertId: "5db55476000502bed07e4583"
labels: {
clone_id: "00c61b117c10abbe48ef11bb1f4ad5987e3ba1611745455daf2a1d6634c62289065e6f871e6c"
}
logName: "projects/showcase/logs/%2Fvar%2Flog%2Fnginx%2Ferror.log"
receiveTimestamp: "2019-10-27T08:25:26.334404825Z"
resource: {
labels: {…}
type: "gae_app"
}
textPayload: "2019/10/27 08:25:26 [error] 23#23: *166 upstream prematurely closed connection while reading response header from upstream, client: 169.254.1.1, server: _, request: "POST /api/v2/money/topup HTTP/1.1", upstream: "http://127.0.0.1:8081/api/v2/money/topup", host: “x.x.x””
timestamp: "2019-10-27T08:25:26.328382Z"
}
图像分解在这里:错误日志
我的 Nginx.conf 配置设置:
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 650;
keepalive_requests 10000;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Logs will appear on the Google Developer's Console when logged to this
# directory.
access_log /var/log/app_engine/app.log;
error_log /var/log/app_engine/app.log;
gzip on;
gzip_disable "msie6";
server {
# Google App Engine expects the runtime to serve HTTP traffic from
# port 8080.
listen 8080;
root /usr/share/nginx/www;
index index.html index.htm;
}
}
对于 app.yaml 是:
runtime: go111
instance_class: F2
automatic_scaling:
min_idle_instances: 5
max_idle_instances: automatic # default value
min_pending_latency: 30ms # default value
max_pending_latency: automatic
max_concurrent_requests: 50
被调用的函数:
func (h Handler) UpdateTopUps(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
var payload model.C2BCallBack
defer r.Body.Close()
err := json.NewDecoder(r.Body).Decode(&payload)
if err != nil {
http.Error(w, "Bad Request", http.StatusBadRequest)
return
}
str := spew.Sdump(payload)
log.Println(str)
id := uuid.NewV4()
if err != nil {
fmt.Printf("Something went wrong: %s", err)
return
}
if len(payload.MSISDN) > 0 {
amount := strings.Split(payload.TransAmount, ".")
balance := strings.Split(payload.OrgAccountBalance, ".")
var phoneNumber string
if strings.HasPrefix(payload.MSISDN, "07") {
phoneNumber = "255" + payload.MSISDN[1:]
} else {
phoneNumber = payload.MSISDN
}
res := h.database.Create(&model.MpesaTransaction{MpesaTransactionId: id, TransID: payload.TransID, TransTime: payload.TransTime,
TransAmount: amount[0], BusinessShortCode: payload.BusinessShortCode, OrgAccountBalance: balance[0],
MSISDN: phoneNumber, FirstName: payload.FirstName, MiddleName: payload.MiddleName, LastName: payload.LastName})
if err != nil {
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
h.updateWalletBalance(res.Value)
}
}
它有时会工作,然后因上述错误而失败。
解决方案
推荐阅读
- java - 错误:链接引用失败(Android Studio)
- mysql - 什么是 TYPO3 参考索引,为什么它会包含过时的值?
- android - 运行“应用程序”时出错:未找到默认活动
- python - 为什么 numpy ndarray 的 insert 和 append 会返回一个新数组而不是修改原始数组?
- entity-framework-6 - 如何让 UWP Uninstall 完全删除数据库?
- python - 在子进程终止之前,子进程的输出在无缓冲的标准输出管道上不可用?
- ios - MKPolyline boundingMapRect 插图
- xml - 在嵌套的 xml golang 中解组属性
- windows - Windows 10 杀死 EDB Postgres 8080 服务器
- jpa - 在 Play 中保存相关对象的列表!来自表单的框架 1.x