已部署的应用程序会立即自行关闭

我有一个去休息 API 应用程序。我把它多克化了,并把它部署到了库伯内特斯。它正在我的本地工作。


但是在 Kubernetes 中,应用程序会自行关闭,并且 Pod 会重新启动。


它不会打印任何内容、任何日志或任何故障。


import ( 

" github.com/gorilla/mux"

"net/http"

"log"


)   

func main() {

    controller := controllers.Controllers{}

    router := mux.NewRouter()

    router.HandleFunc("/customer", controller.GetCustomer()).Methods("GET")

    router.HandleFunc("/customer", controller.InsertCustomer()).Methods("POST")

    router.HandleFunc("/healthcheck", controller.HealthCheck())


    addr := ":" + os.Getenv("PORT")

    srv := &http.Server{Addr: addr, Handler: router}


    go func() {

        if err := srv.ListenAndServe(); err != nil {

            log.Fatalf("listenAndServe failed: %v", err)

        }

    }()

    println("reached here")

}

令人惊讶的是,当我查看日志时,它会打印“到达这里”行。我检查了变量,它也是正确的。我怀疑这个电话失败了,但我找不到一个合理的答案。envlistenAndServe


子衿沉夜
浏览 69回答 1
1回答

临摹微笑

函数结束时,你的应用也会结束。它不会等待其他非主戈鲁丁完成。请参阅规范:程序执行:main()程序执行首先初始化主包,然后调用函数 。当该函数调用返回时,程序将退出。它不会等待其他(非)戈鲁廷完成。mainmain由于你在新的 goroutine 中启动列表程序,因此没有任何“阻塞”,也没有什么可做的(打印后),因此你的应用将结束。请注意,内置 println() 打印到标准错误,这就是为什么您可能看不到任何日志(标准输出和标准错误可能会保存/重定向到不同位置)。main()"reached here"最简单的“解决方法”是开始收听:main()srv := &http.Server{Addr: addr, Handler: router}if err := srv.ListenAndServe(); err != nil {    log.Fatalf("listenAndServe failed: %v", err)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go