59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"bash_go_service/config-loader/pkg/manager"
|
|
"bash_go_service/shared/pkg/constants"
|
|
"bash_go_service/shared/pkg/logger"
|
|
|
|
"github.com/spf13/viper"
|
|
)
|
|
|
|
// ConfigManagerTask 配置管理器任务
|
|
|
|
type ConfigManagerTask struct {
|
|
manager *manager.ConfigManager
|
|
}
|
|
|
|
func NewConfigManagerTask() *ConfigManagerTask {
|
|
d := viper.GetInt64("bash_config.watch_interval")
|
|
return &ConfigManagerTask{
|
|
manager: manager.NewConfigManager(constants.ConfigFile, time.Duration(d)*time.Second),
|
|
}
|
|
}
|
|
|
|
func (t *ConfigManagerTask) Execute(ctx context.Context) {
|
|
// 初始化配置管理器
|
|
ff, err := t.manager.Initialize()
|
|
if err != nil {
|
|
logger.Error("Failed to initialize config manager: %v", err)
|
|
return
|
|
}
|
|
|
|
if ff {
|
|
t.manager.StartWatching()
|
|
} else {
|
|
t.manager.StartSyncConfigTimer()
|
|
}
|
|
// 启动配置监控
|
|
|
|
// 等待上下文取消
|
|
<-ctx.Done()
|
|
|
|
// 停止配置管理器
|
|
t.manager.Stop()
|
|
|
|
// 清理共享内存
|
|
if err := t.manager.ClearSharedMemory(); err != nil {
|
|
logger.Error("Failed to clear shared memory: %v", err)
|
|
}
|
|
|
|
logger.Info("Config manager task stopped")
|
|
}
|
|
|
|
func (t *ConfigManagerTask) Name() string {
|
|
return "ConfigManagerTask"
|
|
}
|