@@ -20,7 +20,6 @@ package main
2020import (
2121 "encoding/json"
2222 "flag"
23- "fmt"
2423 "log"
2524 "sync"
2625
@@ -35,30 +34,90 @@ var (
3534
3635func init () {
3736 flag .StringVar (& namesapceVal , "namespace" , "default" , "namespace" )
38- flag .StringVar (& groupVal , "group" , "group" , "group" )
37+ flag .StringVar (& groupVal , "group" , "polaris-config-example" , "group" )
38+ }
39+
40+ // isConfigGroupEqual 比较两个配置组是否相等(忽略数组顺序)
41+ func isConfigGroupEqual (before , after []* model.SimpleConfigFile ) bool {
42+ if len (before ) != len (after ) {
43+ return false
44+ }
45+
46+ // 创建 map 用于快速查找和比较
47+ beforeMap := make (map [string ]* model.SimpleConfigFile )
48+ for _ , file := range before {
49+ key := file .Namespace + "/" + file .FileGroup + "/" + file .FileName
50+ beforeMap [key ] = file
51+ }
52+
53+ // 检查 after 中的每个文件是否在 before 中存在且内容相同
54+ for _ , file := range after {
55+ key := file .Namespace + "/" + file .FileGroup + "/" + file .FileName
56+ beforeFile , exists := beforeMap [key ]
57+ if ! exists {
58+ return false
59+ }
60+ // 比较版本号和 MD5
61+ if beforeFile .Version != file .Version || beforeFile .Md5 != file .Md5 {
62+ return false
63+ }
64+ }
65+
66+ return true
3967}
4068
4169func main () {
4270 flag .Parse ()
71+ log .Printf ("Starting config group example with namespace: %s, group: %s" , namesapceVal , groupVal )
72+
4373 configAPI , err := polaris .NewConfigGroupAPI ()
4474
4575 if err != nil {
46- fmt . Println ("fail to start example. " , err )
76+ log . Printf ("fail to create ConfigGroupAPI: %v " , err )
4777 return
4878 }
79+ log .Println ("ConfigGroupAPI created successfully" )
4980
81+ log .Printf ("Fetching config group: namespace=%s, group=%s" , namesapceVal , groupVal )
5082 group , err := configAPI .GetConfigGroup (namesapceVal , groupVal )
5183 if err != nil {
52- log .Panic ( err )
84+ log .Panicf ( "fail to get config group: %v" , err )
5385 return
5486 }
87+
88+ // 获取配置组中的所有文件
89+ files , revision , success := group .GetFiles ()
90+ if ! success {
91+ log .Println ("Warning: Failed to get files from config group or group is empty" )
92+ } else {
93+ log .Printf ("Config group fetched successfully, revision: %s, file count: %d" , revision , len (files ))
94+ }
95+
96+ // 打印配置组中的所有文件名
97+ if len (files ) > 0 {
98+ log .Println ("Config files in group:" )
99+ for _ , file := range files {
100+ log .Printf (" - %s (version: %d, md5: %s)" , file .FileName , file .Version , file .Md5 )
101+ }
102+ } else {
103+ log .Println ("No config files found in group" )
104+ }
105+
106+ log .Println ("Adding change listener for config group..." )
55107 group .AddChangeListener (func (event * model.ConfigGroupChangeEvent ) {
108+ // 判断配置是否真的发生了变化(忽略数组顺序)
109+ if isConfigGroupEqual (event .Before , event .After ) {
110+ //log.Println("Config group polled, but no changes detected (content unchanged)")
111+ return
112+ }
113+
56114 before , _ := json .Marshal (event .Before )
57115 after , _ := json .Marshal (event .After )
58-
59116 log .Printf ("receive config_group change event\n before: %s\n after: %s" , string (before ), string (after ))
60117 })
118+ log .Println ("Change listener added successfully" )
61119
120+ log .Println ("Listening for config group changes... Press Ctrl+C to exit" )
62121 wait := sync.WaitGroup {}
63122 wait .Add (1 )
64123 wait .Wait ()
0 commit comments