Polaris系列-02.启动分析一
创始人
2025-01-08 21:03:16
0

直入主题:
在这里插入图片描述
里面最重要的就是上图中的启动方法:

bootstrap.Start(configFilePath) 

cmd子包分析结束,开始进入bootstrap子包。
在这里插入图片描述
第67行:

cfg, err := boot_config.Load(configFilePath) 
  • 1.读取文件内容,变成string
  • 2.使用gopkg.in/yaml.v2库反序列化yaml格式文件,把结果保存到 cfg变量中

所以你应该学会了如何读取yaml配置文件。并且里面需要说明的是,使用了一个方法:os.ExpandEnv(configContent),说明如下:

// ExpandEnv replaces ${var} or $var in the string according to the values // of the current environment variables. References to undefined // variables are replaced by the empty string. func ExpandEnv(s string) string { 	return Expand(s, Getenv) } 

即如果环境变量中配置了相应值,会替换yaml配置中的内容,熟悉Java的或者知道正则中的Matcher.appendReplacement模板替换,如下示例:
在这里插入图片描述
如果环境变量配置了 MYSQL_USER=root, 那么yaml配置内容中${MYSQL_USER} 或者 $MYSQL_USER 解析读取后的内容会被替换成 root

得到cfg数据模型后,又序列化,这是为了校验cfg的有效性?
注意下面红框,这就是控制台出现大堆配置输出的缘由:
在这里插入图片描述
至此,读取配置工作✅

2.初始化日志:这里面我想分享的是 时间轮timewheel
在这里插入图片描述
定时任务每分钟“巡检”一次:看看有没有任务被添加进来,并判断是否需要真正执行:回调任务添加者提供的callback函数
在这里插入图片描述
里面有协程,锁,通过time.Ticker任务调度 等设计理念和实战,不了解的值得去好好看看的。
上图中297行正是添加任务:处理滚动日志,这也好理解:别让一个日志文件太大,定时切割。

在这里插入图片描述
在这里插入图片描述
上图2行代码做了2件事:
1.把localHost的值保存到全局变量utils.LocalHost
2.对传入的context包了一层,添加一个kv, v正是 localHost

return context.WithValue(ctx, localhostCtx{}, localhost) 

在这里插入图片描述
只做了一件事:把port的值保存到全局变量utils.LocalPort中
在这里插入图片描述
实际上,上述几个保存全局变量值在const.go文件中,里面的变量也就这3个:
在这里插入图片描述
4.metrics.InitMetrics() 跳过分析

InitMetrics 初始化 metrics 的所有指标 

5.eventhub.InitEventHub()

// InitEventHub initialize event hub func InitEventHub() { 	initOnce.Do(func() { 		globalEventHub = createEventhub() 	}) } 

数据模型如下:

// eventHub event hub type eventHub struct { 	ctx    context.Context 	cancel context.CancelFunc 	topics map[string]*topic // 看这里 	mu     sync.RWMutex }  type topic struct { 	name    string 	queue   chan Event // 事件队列 	closeCh chan struct{} 	subs    map[string]*subscription // 订阅者 	mu      sync.RWMutex } // Subscription subscription info type subscription struct { 	name    string 	queue   chan Event 	closeCh chan struct{} 	handler Handler 	opts    *SubOptions // 里面只有一个队列大小属性 } // Handler event handler type Handler interface { 	// PreProcess do preprocess logic for event 	PreProcess(context.Context, any) any 	// OnEvent event process logic 	OnEvent(ctx context.Context, any2 any) error } 

先对发布订阅事件模型有个大概了解,后续有机会案例分析。

6.设置插件配置:
在这里插入图片描述
只是把插件相差配置保存到全局变量中:
在这里插入图片描述
在这里插入图片描述
里面挺多配置内容的,具体可参看
在这里插入图片描述
在这里插入图片描述
因为启动过程涉及到的内容比较多,所以分多篇介绍。
本篇介绍了

  1. 启动开始 读取配置内容
  2. 初始化日志打印,使用第三方日志组件,并且使用时间轮设计处理日志滚动
  3. 初始化ip+port
  4. 初始化prometheus 度量
  5. 初始化事件发布订阅
  6. 保存插件配置到全局变量

后续有 初始化存储,启动流程,初始化插件,加载数据等。

相关内容

热门资讯

透视好友房!h5反杀程序,雀神... 您好:这款雀神广东麻将推倒胡辅助器下载游戏是可以开挂的,确实是有挂的,很多玩家在这款雀神广东麻将推倒...
第6分钟辅助挂!微友破解器辅助... 第6分钟辅助挂!微友破解器辅助插件下载,多乐辅助在哪里可以下载(掌握开挂透视辅助挂);亲,多乐辅助在...
免费测试版!杭州都莱可以装挂吗... 免费测试版!杭州都莱可以装挂吗,蜀山四川智能辅助插件(有挂教学辅助平台);亲,蜀山四川智能辅助插件这...
透视透视!微信小程序辅助器脚本... 您好:微信小程序辅助器脚本这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很多用户...
第二分钟辅助挂!手游奇迹陕西辅... 第二分钟辅助挂!手游奇迹陕西辅助工具,温州茶园辅助软件(精通开挂透视辅助安装);无需打开直接搜索微信...
终于懂了!蜀山四川智能辅助软件... 终于懂了!蜀山四川智能辅助软件,传送屋高仿版激k辅助(有挂解密辅助挂) 了解更多开挂安装加(1367...
透视ai!广东省神麻雀控制器,... 透视ai!广东省神麻雀控制器,微乐贵阳足鸡麻将开挂,解说技巧(竟然有挂)1、下载安装好微乐贵阳足鸡麻...
6分钟辅助挂!开心泉州小程序辅... 6分钟辅助挂!开心泉州小程序辅助,中至赣州黑科技辅助软件视频(领会开挂辅助工具)这是一款可以让一直输...
一分钟了解!微信小程序辅助器防... 微信小程序辅助器防检测开挂教程视频分享装挂详细步骤在当今的网络游戏中,微信小程序辅助器防检测作为一种...
第五分钟辅助挂!樱花之盛牛牛挂... 第五分钟辅助挂!樱花之盛牛牛挂,微信随意玩辅助器(掌握透视开挂辅助安装)1、下载安装好微信随意玩辅助...