diff --git a/bootstrap.go b/bootstrap.go index 492cb91..28e2561 100644 --- a/bootstrap.go +++ b/bootstrap.go @@ -3,8 +3,10 @@ package bootstrap import ( "fmt" + "github.com/go-kratos/kratos/v2" "github.com/go-kratos/kratos/v2/log" kratosRegistry "github.com/go-kratos/kratos/v2/registry" + "github.com/go-kratos/kratos/v2/transport" "github.com/tx7do/kratos-bootstrap/config" "github.com/tx7do/kratos-bootstrap/logger" @@ -14,8 +16,30 @@ import ( conf "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" ) -// Bootstrap 应用引导启动 -func Bootstrap(serviceInfo *config.ServiceInfo) (*conf.Bootstrap, log.Logger, kratosRegistry.Registrar) { +var ( + Service = config.NewServiceInfo( + "", + "1.0.0", + "", + ) +) + +func NewApp(ll log.Logger, rr kratosRegistry.Registrar, srv ...transport.Server) *kratos.App { + return kratos.New( + kratos.ID(Service.GetInstanceId()), + kratos.Name(Service.Name), + kratos.Version(Service.Version), + kratos.Metadata(Service.Metadata), + kratos.Logger(ll), + kratos.Server( + srv..., + ), + kratos.Registrar(rr), + ) +} + +// doBootstrap 应用引导启动 +func doBootstrap(serviceInfo *config.ServiceInfo) (*conf.Bootstrap, log.Logger, kratosRegistry.Registrar) { // inject command flags Flags := config.NewCommandFlags() Flags.Init() @@ -40,3 +64,20 @@ func Bootstrap(serviceInfo *config.ServiceInfo) (*conf.Bootstrap, log.Logger, kr return config.GetBootstrapConfig(), ll, reg } + +type InitApp func(logger log.Logger, registrar kratosRegistry.Registrar, bootstrap *conf.Bootstrap) (*kratos.App, func(), error) + +func Bootstrap(initApp InitApp) { + // bootstrap + cfg, ll, reg := doBootstrap(Service) + + app, cleanup, err := initApp(ll, reg, cfg) + if err != nil { + panic(err) + } + defer cleanup() + + if err = app.Run(); err != nil { + panic(err) + } +} diff --git a/bootstrap_test.go b/bootstrap_test.go new file mode 100644 index 0000000..dfe1097 --- /dev/null +++ b/bootstrap_test.go @@ -0,0 +1,19 @@ +package bootstrap + +import ( + "github.com/go-kratos/kratos/v2" + "github.com/go-kratos/kratos/v2/log" + "github.com/go-kratos/kratos/v2/registry" + v1 "github.com/tx7do/kratos-bootstrap/api/gen/go/conf/v1" + "testing" +) + +func initApp(logger log.Logger, registrar registry.Registrar, bootstrap *v1.Bootstrap) (*kratos.App, func(), error) { + app := NewApp(logger, registrar) + return app, func() { + }, nil +} + +func TestBootstrap(t *testing.T) { + Bootstrap(initApp) +}