节点在线、应用在线、配置在线使用令牌查询
大石头 authored at 2021-12-16 19:49:30
1.28 KiB
Stardust
package main

import (
	"fmt"
	"time"

	"github.com/NewLifeX/Stardust/SDK/Go/stardust"
)

func main() {
	// 同时启动 APM 和配置中心
	tracer := stardust.NewTracer("http://localhost:6600", "MyGoApp", "MySecret")
	tracer.Start()
	defer tracer.Stop()

	config := stardust.NewConfigClient("http://localhost:6600", "MyGoApp", "MySecret")
	config.Start()
	defer config.Stop()

	fmt.Println("APM 和配置中心已启动...")

	// 监听配置变更,并记录到 APM
	config.OnChange(func(configs map[string]string) {
		span := tracer.NewSpan("配置更新", "")
		span.Tag = fmt.Sprintf("配置项数量: %d", len(configs))
		span.Finish()

		fmt.Println("\n配置已更新:")
		for k, v := range configs {
			fmt.Printf("  %s = %s\n", k, v)
		}
	})

	// 等待配置加载
	time.Sleep(time.Second * 2)

	// 业务循环:根据配置执行业务逻辑
	for i := 0; i < 10; i++ {
		span := tracer.NewSpan("业务处理", "")

		// 读取配置
		dbHost := config.Get("database.host")
		dbPort := config.Get("database.port")

		span.Tag = fmt.Sprintf("DB: %s:%s, 批次: %d", dbHost, dbPort, i+1)

		// 模拟业务处理
		time.Sleep(time.Second * 2)

		span.Finish()

		fmt.Printf("业务批次 %d 完成\n", i+1)
	}

	fmt.Println("所有业务完成,等待数据上报...")
	time.Sleep(time.Second * 5)
}