欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 【Temporal】Server启动逻辑

【Temporal】Server启动逻辑

2025/2/24 4:15:54 来源:https://blog.csdn.net/m0_47495420/article/details/141308683  浏览:    关键词:【Temporal】Server启动逻辑

Server启动

代码入口:temporal/cmd/server/main.go

       Choose here       javascripttypescripthtmlcssshellpythongolangjavacc++c#phprubyswiftkotlinscalarustdartelixirhaskellluaperlrsql     

s, err := temporal.NewServer(temporal.ForServices(services),temporal.WithConfig(cfg),temporal.WithDynamicConfigClient(dynamicConfigClient),temporal.WithLogger(logger),temporal.InterruptOn(temporal.InterruptCh()),temporal.WithAuthorizer(authorizer),temporal.WithClaimMapper(func(cfg *config.Config) authorization.ClaimMapper {return claimMapper}),
)
if err != nil {return cli.Exit(fmt.Sprintf("Unable to create server. Error: %v.", err), 1)
}err = s.Start()
func (s *ServerFx) Start() error {err := s.app.Start(context.Background())if err != nil {return err}......return nil
}

通过上面可以看到sever是通过一个app实例来启动的,那么这个app是什么呢?
我们找到这个app初始化的地方:

func NewServerFx(topLevelModule fx.Option, opts ...ServerOption) (*ServerFx, error) {var s ServerFxs.app = fx.New(topLevelModule,fx.Supply(opts),fx.Populate(&s.startupSynchronizationMode),fx.Populate(&s.logger),)if err := s.app.Err(); err != nil {return nil, err}return &s, nil
}

可以看到,这个app实际上一个fx实例,这个fx是一个uber开源的库,这个库是golang中非常流行的依赖注入解决方案库,具体后面有时间再单独拿出来讲解。

模块启动逻辑

这里我们主要来看下server启动的时候加载了哪些模块,我们找到topLevelModule:

TopLevelModule = fx.Options(pprof.Module,fx.Provide(NewServerFxImpl),fx.Provide(ServerOptionsProvider),TraceExportModule,fx.Provide(PersistenceFactoryProvider),fx.Provide(HistoryServiceProvider),fx.Provide(MatchingServiceProvider),fx.Provide(FrontendServiceProvider),fx.Provide(InternalFrontendServiceProvider),fx.Provide(WorkerServiceProvider),fx.Provide(ApplyClusterMetadataConfigProvider),fx.Invoke(ServerLifetimeHooks),FxLogAdapter,
)

通过对fix的了解我们知道,fx.invoke()方法就是执行一些模块的启动逻辑,相当于我们写的init()方法,在服务启动的时候自动执行,所以我们可以通过全局搜索fx.invoke来找到temporal server启动的时候都做了些什么。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词