63 lines
1.3 KiB
Go
63 lines
1.3 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.GetDuration("bash_config.watch_interval")
|
|
if d < 1*time.Hour {
|
|
d = 1 * time.Hour // 默认值为1小时
|
|
}
|
|
logger.Info("ConfigManagerTask watch interval: %v", d)
|
|
return &ConfigManagerTask{
|
|
manager: manager.NewConfigManager(constants.RuleFile, d),
|
|
}
|
|
}
|
|
|
|
func (t *ConfigManagerTask) Execute(ctx context.Context) {
|
|
// 初始化配置管理器
|
|
ff, err := t.manager.Initialize(false)
|
|
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"
|
|
}
|