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 无效;优雅关闭会等待消费者和传输完成。

完整选项与安全默认值见安全配置参考