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

我无法让 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 超时


潇湘沐
浏览 148回答 3
3回答

大话西游666

在将 GAE 标准项目从 go19 迁移到 go112 以使用 go 模块时,我遇到了同样的问题。此外,我收到了很多“502 bad gateway”消息。用appengine.Main( ) 替换 main() 中的 http.ListenAndServe( )解决了上下文问题。移动到go111而不是 112 解决了另一个问题。文档和示例对此不是很清楚。

ibeautiful

迁移到 1.12 的文档说明:使用 Cloud Tasks 通过 cloudtasks 包将 Go 1.12 中的任务排入队列。您可以使用任何 App Engine 服务作为 App Engine 任务的目标。但是 cloudtasks 包文档(截至今天)清楚地标记为 beta 和 unstable。所以这里的答案可能是。此功能不受支持。也就是说,我在 go111 下的生产中使用它,到目前为止我没有注意到任何严重问题。

不负相思意

您之所以看到,internal.flushLog: Flush RPC: service bridge HTTP failed是因为您在尝试运行 Go 1.12+ 运行时时调用了appengine.Main()或其他库。appengine(我的猜测是旧的运行时必须调用一些谷歌内部的会计基础设施,而这不适用于 1.12“下一代”系统。)解决方案不是降级你的 Go 版本——你这样做会错过大量的性能和安全改进,而且你不能利用新硬件——解决方案是删除对 lib 的所有appengine调用并改用 GCP 的云库
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go