【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 ServerFx
   s.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启动的时候都做了些什么。

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值