package nacos import ( "context" "log" "net" "testing" "time" "github.com/nacos-group/nacos-sdk-go/clients" "github.com/nacos-group/nacos-sdk-go/common/constant" "github.com/nacos-group/nacos-sdk-go/vo" "github.com/go-kratos/kratos/v2/registry" ) func getIntranetIP() string { addrs, err := net.InterfaceAddrs() if err != nil { return "127.0.0.1" } for _, address := range addrs { if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { if ipnet.IP.To4() != nil { return ipnet.IP.String() } } } return "127.0.0.1" } func TestRegistry(t *testing.T) { ip := getIntranetIP() serviceName := "golang-sms@grpc" ctx := context.Background() sc := []constant.ServerConfig{ *constant.NewServerConfig(ip, 8848), } cc := constant.ClientConfig{ NamespaceId: "public", // namespace id TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "/tmp/nacos/log", CacheDir: "/tmp/nacos/cache", RotateTime: "1h", MaxAge: 3, LogLevel: "debug", } // a more graceful way to create naming client client, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &cc, ServerConfigs: sc, }, ) if err != nil { t.Fatal(err) } _, err = client.RegisterInstance(vo.RegisterInstanceParam{ Ip: "f", Port: 8840, ServiceName: serviceName, Weight: 10, Enable: true, Healthy: true, Ephemeral: true, Metadata: map[string]string{"idc": "shanghai-xs"}, }) if err != nil { t.Fatal(err) } time.Sleep(time.Second) is, err := client.GetService(vo.GetServiceParam{ ServiceName: serviceName, }) if err != nil { t.Fatal(err) } t.Logf("is %#v", is) time.Sleep(time.Second) r := New(client) go func() { var ( w registry.Watcher watchErr error ) w, watchErr = r.Watch(ctx, "golang-sms@grpc") if watchErr != nil { log.Fatal(watchErr) } for { var res []*registry.ServiceInstance res, watchErr = w.Next() if watchErr != nil { return } log.Printf("watch: %d", len(res)) for _, r := range res { log.Printf("next: %+v", r) } } }() time.Sleep(time.Second) ins, err := r.GetService(ctx, serviceName) if err != nil { t.Fatal(err) } for _, in := range ins { t.Logf("ins: %#v", in) } time.Sleep(time.Second) } func TestRegistryMany(t *testing.T) { ip := getIntranetIP() serviceName := "golang-sms@grpc" // ctx := context.Background() sc := []constant.ServerConfig{ *constant.NewServerConfig(ip, 8848), } cc := constant.ClientConfig{ NamespaceId: "public", // namespace id TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "/tmp/nacos/log", CacheDir: "/tmp/nacos/cache", RotateTime: "1h", MaxAge: 3, LogLevel: "debug", } // a more graceful way to create naming client client, err := clients.NewNamingClient( vo.NacosClientParam{ ClientConfig: &cc, ServerConfigs: sc, }, ) if err != nil { t.Fatal(err) } _, err = client.RegisterInstance(vo.RegisterInstanceParam{ Ip: "f1", Port: 8840, ServiceName: serviceName, Weight: 10, Enable: true, Healthy: true, Ephemeral: true, Metadata: map[string]string{"idc": "shanghai-xs"}, }) if err != nil { t.Fatal(err) } _, err = client.RegisterInstance(vo.RegisterInstanceParam{ Ip: "f2", Port: 8840, ServiceName: serviceName, Weight: 10, Enable: true, Healthy: true, Ephemeral: true, Metadata: map[string]string{"idc": "shanghai-xs"}, }) if err != nil { t.Fatal(err) } _, err = client.RegisterInstance(vo.RegisterInstanceParam{ Ip: "f3", Port: 8840, ServiceName: serviceName, Weight: 10, Enable: true, Healthy: true, Ephemeral: true, Metadata: map[string]string{"idc": "shanghai-xs"}, }) if err != nil { t.Fatal(err) } time.Sleep(time.Second) is, err := client.GetService(vo.GetServiceParam{ ServiceName: serviceName, }) if err != nil { t.Fatal(err) } for _, host := range is.Hosts { t.Logf("host: %#v,e: %v", host, err) } time.Sleep(time.Second) }