fiber
fiber copied to clipboard
🤗 [Question]: FX with Fiber graceful shutdown Failed to stop cleanly: context deadline exceeded
Question Description
Hello Guys
i always getting Failed to stop (cleanly: context deadline exceeded) after run the script and hit the endpoint /
[Fx] ERROR Failed to stop cleanly: context deadline exceeded
i also try ShutdownWithTimeout and ShutdownWithTimeout no one working
package main
import (
"fx-fiber/webserver"
"context"
"go.uber.org/fx"
"log"
"time"
)
func boostrap(
lifeCycle fx.Lifecycle,
webserver *webserver.Webserver,
) {
lifeCycle.Append(fx.Hook{
OnStart: func(_ context.Context) error {
go func() {
if err := webserver.StartServer(); err != nil {
log.Fatalf("start server error : %v\n", err)
}
}()
return nil
},
OnStop: func(ctx context.Context) error {
log.Println("stopping server ...")
time.Sleep(5 * time.Second)
log.Println("stop server success")
return webserver.ShutDownServer()
},
})
}
func main() {
fx.New(
user.module,
webserver.Module,
fx.Invoke(boostrap),
).Run()
}
package webserver
import (
"github.com/gofiber/fiber/v2"
)
type (
Webserver struct {
app *fiber.App
}
webserverInterface interface {
StartServer() error
ShutDownServer() error
}
)
func NewWebServer() *Webserver {
return &Webserver{app: fiber.New()}
}
func (webServer *Webserver) App() *fiber.App {
return webServer.app
}
func (webServer *Webserver) StartServer() error {
app := webServer.app
return app.Listen(":3000")
}
func (webServer *Webserver) EchoRoute(ctx *fiber.Ctx) error {
return ctx.SendString("Hello, World 👋!")
}
func (webServer *Webserver) ShutDownServer() error {
return webServer.app.Shutdown()
}
package webserver
import "go.uber.org/fx"
var Module = fx.Options(
fx.Provide(NewWebServer),
)
package users
import (
"fx-fiber/webserver"
"github.com/gofiber/fiber/v2"
"go.uber.org/fx"
)
type UserController struct {
fx.In
}
func (c *UserController) GetPosts(ctx *fiber.Ctx) error {
return ctx.SendString("Hello, World 👋!")
}
func UseRegister(webserver *webserver.Webserver, endpoint UserController) {
webserver.App().Get("/", endpoint.GetPosts)
}
package users
import (
"go.uber.org/fx"
)
var Module = fx.Options(
fx.Invoke(UseRegister),
)
Code Snippet (optional)
No response
Checklist:
- [X] I agree to follow Fiber's Code of Conduct.
- [X] I have checked for existing issues that describe my questions prior to opening this one.
- [X] I understand that improperly formatted questions may be closed without explanation.