【问题标题】:Request Cancellation is not propagated to cloud run container请求取消不会传播到云运行容器
【发布时间】:2019-06-03 16:58:09
【问题描述】:

当发起服务取消发送到云运行服务的 HTTP 请求时,取消/关闭的连接不会传播到云运行容器内正在服务的请求。

示例代码:

package main

import (
    "log"
    "net/http"
    "os"
    "time"
)

func main() {
    port := os.Getenv("PORT")
    if port == "" {
        port = "8080"
    }
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        ctx := r.Context()
        select {
        case <-ctx.Done():
            log.Printf("context cancelled")
        case <-time.After(time.Minute):
            w.Write([]byte("OK"))
            log.Printf("request completed. path=%s", r.URL.Path)
        }
    })
    log.Fatal(http.ListenAndServe(":"+port, nil))
}

在本地运行此代码,发送到http://localhost:8080 然后使用 ctrl-c 取消的 curl 请求将在日志中显示为“上下文已取消”。与部署在云中运行并取消的服务相同的请求将在 1 分钟后在日志中显示为成功请求。

【问题讨论】:

    标签: google-cloud-run


    【解决方案1】:

    我认为 Cloud Run 今天不提供这样的保证。

    我猜这是因为实现细节。运行服务的外部流量不会直接进入容器,而是通过一个或多个负载均衡器和代理。这些 LB/代理可能无法正确传播客户端断开连接(或只是缓冲请求/响应)。这将导致您看到的行为。

    我将继续提交有关它的内部功能请求。感谢您提出。

    【讨论】:

    • 这个实现了吗?我查看了 Cloud Run 的公共问题跟踪器,但没有看到任何关于该问题的提及,并且在文档中找不到任何内容。我希望它是预期的行为。
    • 否,尚未实施。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 2019-03-12
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多