顺序

本文主要研究kingbus的main.go。

main.go

kingbus/CMD/kingbus

Package main

Import(

Flag '

Fmt '

“操作系统”

Os/signal '

' Syscall '

GI;

GI;

GI;

)。

Var(

//builddate used for generating build date in make command

BuildDate string

//build version used for generating king bus version in make command

构建版本字符串(BuildVersion string)

)。

Const banner string=`

_ _ _ _ _ _

//_ _ _ _(_)_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

/////_ _ _ _ _ _ _ '/_ _ _ _ _ _/////_ _ _/

/、///////////////////_/(_ _)

/_/| _/_/_/_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _/

/_ _ _ _ _ _/

“`

Func main() {

ConfigFile :=('config ','。“kingbus config file”)

Printversion:=('version ',false,' print king bus version info ')

()

//only打印版本

If *打印版本{

(' version is% s,build at% s n ',build version,builddate)

Return

}

(横幅)

(' version is% s,build at% s n ',build version,builddate)

Iflen (*配置文件)==0 {

(' must use a config file ')

Return

}

Servercfg、err:=con (*配置文件)

If err!=nil {

(“newkingbusserverconfig error、err3360% s n”、err.error())

Return

}

//init log

Log。InitLogger、)

Defer log。UnInitLoggers()

Ks,err :=(serverCfg)

If err!=nil {

log . log . fatalf(' main : newkingbusserver error、err :% s '、err)

}

Sc :=make(chan os。Signal,1)

(sc,

而且,

而且,

而且,

)。

Go func() {

For {

Sig :=-sc

If SIG==|| SIG==|| SIG=={

Ks。Stop()

操作系统。Exit(0)

}

}

}()

Ks。Run()

}main方法读取config,version参数,通过con(*configFile)获取serverCfg,然后通过(serverCfg)创建KingbusServer并运行ks.re

func newkingbusserverconfig(config path string)(* kingbusserverconfig,error) {

if config path=' ' {

Return nil,errors.new ('config path is nil ')

}

配置路径(Vi)

if err :=VI();Err!=nil {

Return nil、err

}

//get raft node config

Raftnodecfg、err:=getraftnodeconfig()

If err!=nil {

Return nil、err

}

Adminurls、err :=([]string { VI(' admin-URL ')})

If err!=nil {

Return nil、err

}

If len(管理URLs)!=1 {

Return nil,(' adminURLs muster be 1 ')

}

kscfg :=kingbusserverconfig {

RaftNodeCfg: *raftNodeCfg、

管理URLs :管理URLs、

metrics addr : VI(' metrics-addr '),

logdir : VI(“log-dir”)、

loglevel : VI(“log-level”)、

}

Return ksCfg,nil

}NewKingbusServerConfig方法通过viper解析配置文件。KingbusServerConfig定义了RaftNodeCfg、AdminURLs、MetricsAddr、LogDir和LogLevel属性

con

kingbus/server/

func newkingbusserver(CFG * con)(* kingbusserver,error) {

S :=new(KingbusServer)

S.Cfg=CFG

S.lead=a(0)

Err :=s.starRa)

If err!=nil {

log . log . errorf(' newkingbusserver : start raft error,err :% s ',err)

Return nil、err

}

Err=s.startRaftPeer)

If err!=nil {

log . log . errorf(' newkingbusserver : start raftpeer error,err :% s ',err)

Return nil、err

}

Err=s.startAdminServer)

If err!=nil {

log . log . errorf(' newkingbusserver : startadminserver error,err:% s ',err)

Return nil、err

}

Err=s.newBinlogProgress()

If err!=nil {

log . log . errorf(' newkingbusserver : newbinlogprogress error、err3360% s '、err)

Return nil、err

}

Err=s.startPrometheu)

If err!=nil {

log . log . errorf(' newkingbusserver : start Prometheus error,err :% s ',err)

Return nil、err

}

S.started=a(false)

Return s,nil

}NewKingbusServer主要通过KingbusServerConfig提供KingbusServer创建。运行KingbusServer的starRaft、startRaftPeer、startAdminServer、newBinlogProgress、startPrometheus

kingbus,然后运行Run()

小结

main.go

1.《关于kingexit我想说聊聊kingbus的main.go》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《关于kingexit我想说聊聊kingbus的main.go》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.cxvn.com/gl/djyxgl/146898.html