Skip to content

spine.App

概覽

spine.App 是應用程式入口,負責註冊相依性、HTTP 路由、攔截器、訊息消費者、WebSocket 和自訂傳輸,並在啟動前驗證完整設定。

go
app := spine.New()
app.Constructor(NewUserService, NewUserController)
app.Interceptor(&LoggingInterceptor{})
app.Route("GET", "/users", (*UserController).List)

opts := boot.Options{Address: ":8080", HTTP: &boot.HTTPOptions{}}
if err := app.Validate(opts); err != nil {
	log.Fatal(err)
}
if err := app.Run(opts); err != nil {
	log.Fatal(err)
}

方法

方法用途
New()建立應用程式實例
Constructor(constructors...)註冊容器建構函式
Route(method, path, handler, options...)註冊 HTTP 路由
Interceptor(interceptors...)為 HTTP 與 WebSocket 註冊全域攔截器
InterceptorFor(scope, interceptors...)僅為選定傳輸範圍註冊全域攔截器
Transport(fn)擴充內建 HTTP 傳輸
RegisterTransport(transport)註冊獨立自訂傳輸
Validate(options)不開啟網路連線,彙總設定問題
Run(options)完成預檢、預熱和傳輸就緒檢查後執行應用程式
Consumers()回傳訊息消費者註冊表
WebSocket()回傳 WebSocket 註冊表

攔截器範圍

go
app.Interceptor(&MetricsInterceptor{}) // HTTP + WebSocket
app.InterceptorFor(boot.InterceptorHTTP, &CORSInterceptor{})
app.InterceptorFor(boot.InterceptorWebSocket, &WSAuthInterceptor{})

可用範圍是 boot.InterceptorHTTPboot.InterceptorWebSocketboot.InterceptorAll。同一指標實例在多個範圍註冊時會合併並只執行一次;不同指標實例即使型別相同也會獨立執行。

設定驗證與啟動

Validate 回傳的設定錯誤可用 errors.As(err, *boot.ConfigError) 檢查,並逐一讀取 IssuesPathCodeMessageHintCode 適合部署自動化;不要剖析面向人的訊息。

Run 會執行同一無網路預檢,接著預熱控制器和消費者、執行 Kafka 協定握手、驗證 RabbitMQ 拓撲連線並初始化自訂傳輸。HTTP listener 只在這些步驟全部成功後啟動。負數 ShutdownTimeout 無效;優雅關閉會等待消費者和傳輸完成。

完整選項與安全預設值請參閱安全設定參考