in pkg/core/bootstrap/bootstrap.go [76:155]
func buildRuntime(appCtx context.Context, cfg dubbo_cp.Config) (core_runtime.Runtime, error) {
if err := autoconfigure(&cfg); err != nil {
return nil, err
}
builder, err := core_runtime.BuilderFor(appCtx, cfg)
if err != nil {
return nil, err
}
for _, plugin := range core_plugins.Plugins().BootstrapPlugins() {
if err := plugin.BeforeBootstrap(builder, cfg); err != nil {
return nil, errors.Wrapf(err, "failed to run beforeBootstrap plugin:'%s'", plugin.Name())
}
}
// 定义store的状态
if cfg.DeployMode == config_core.UniversalMode || cfg.DeployMode == config_core.HalfHostMode {
cfg.Store.Type = store.Traditional
builder.WithAppRegCtx(dubbo_registry.NewApplicationContext())
builder.WithInfRegCtx(dubbo_registry.NewInterfaceContext())
} else {
cfg.Store.Type = store.KubernetesStore
}
// 初始化cache
builder.WithDataplaneCache(&sync.Map{})
// 初始化传统微服务体系所需要的组件
if err := initializeTraditional(cfg, builder); err != nil {
return nil, err
}
if err := initializeResourceStore(cfg, builder); err != nil {
return nil, err
}
// 隐蔽了configStore, 后期再补全
builder.WithResourceValidators(core_runtime.ResourceValidators{})
if err := initializeResourceManager(cfg, builder); err != nil { //nolint:contextcheck
return nil, err
}
builder.WithDataSourceLoader(datasource.NewDataSourceLoader(builder.ReadOnlyResourceManager()))
leaderInfoComponent := &component.LeaderInfoComponent{}
builder.WithLeaderInfo(leaderInfoComponent)
builder.WithDpServer(server.NewDpServer(*cfg.DpServer, func(writer http.ResponseWriter, request *http.Request) bool {
return true
}))
resourceManager := builder.ResourceManager()
ddsContext := dds_context.DefaultContext(appCtx, resourceManager, cfg)
builder.WithDDSContext(ddsContext)
if err := initializeMeshCache(builder); err != nil {
return nil, err
}
for _, plugin := range core_plugins.Plugins().BootstrapPlugins() {
if err := plugin.AfterBootstrap(builder, cfg); err != nil {
return nil, errors.Wrapf(err, "failed to run afterBootstrap plugin:'%s'", plugin.Name())
}
}
rt, err := builder.Build()
if err != nil {
return nil, err
}
if err := rt.Add(leaderInfoComponent); err != nil {
return nil, err
}
for name, plugin := range core_plugins.Plugins().RuntimePlugins() {
if err := plugin.Customize(rt); err != nil {
return nil, errors.Wrapf(err, "failed to configure runtime plugin:'%s'", name)
}
}
return rt, nil
}