为了账号安全,请及时绑定邮箱和手机立即绑定

go112 标准运行时中 appengine taskqueue 的正确上下文是什么

go112 标准运行时中 appengine taskqueue 的正确上下文是什么

Go
潇湘沐 2023-06-19 15:48:35
我无法让 appengine 任务队列接受我抛给它的任何上下文:import (    "context"    "google.golang.org/appengine"    "google.golang.org/appengine/taskqueue")   /* snip */    ctx:= context.Background()    task := taskqueue.NewPOSTTask("/b/mytask", params)    _, err = taskqueue.Add(ctx, task, "")    if err != nil {        return fmt.Errorf("adding background task with path %s: %v", task.Path, err)    }正如go111 迁移文档所述,我在我的 main.go main func 中调用 appengine.Main() (但是go112 迁移文档中缺少这一行,所以我不确定它是必需的)。我试过了:context.Background() request.Context() appengine.NewContext(r) appengine.BackgroundContext() context.TODO()全部导致错误:不是 App Engine 上下文除了appengine.BackgroundContext()得到:服务桥 HTTP 失败:发布 http://appengine.googleapis.internal:10001/rpc_http:拨打 tcp 169.254.169.253:10001:i/o 超时
查看完整描述

3 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

在将 GAE 标准项目从 go19 迁移到 go112 以使用 go 模块时,我遇到了同样的问题。此外,我收到了很多“502 bad gateway”消息。

用appengine.Main( ) 替换 main() 中的 http.ListenAndServe( )解决了上下文问题。移动到go111而不是 112 解决了另一个问题。文档和示例对此不是很清楚。


查看完整回答
反对 回复 2023-06-19
?
ibeautiful

TA贡献1993条经验 获得超5个赞

迁移到 1.12 的文档说明:

使用 Cloud Tasks 通过 cloudtasks 包将 Go 1.12 中的任务排入队列。您可以使用任何 App Engine 服务作为 App Engine 任务的目标。

但是 cloudtasks 包文档(截至今天)清楚地标记为 beta 和 unstable。所以这里的答案可能是。此功能不受支持。

也就是说,我在 go111 下的生产中使用它,到目前为止我没有注意到任何严重问题。


查看完整回答
反对 回复 2023-06-19
?
不负相思意

TA贡献1777条经验 获得超10个赞

您之所以看到,internal.flushLog: Flush RPC: service bridge HTTP failed是因为您在尝试运行 Go 1.12+ 运行时时调用了appengine.Main()或其他库。appengine(我的猜测是旧的运行时必须调用一些谷歌内部的会计基础设施,而这不适用于 1.12“下一代”系统。)

解决方案不是降级你的 Go 版本——你这样做会错过大量的性能和安全改进,而且你不能利用新硬件——解决方案是删除对 lib 的所有appengine调用并改用 GCP 的云库


查看完整回答
反对 回复 2023-06-19
  • 3 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信