zoukankan      html  css  js  c++  java
  • go nacos服务发现

    本来想研究一下nacos的服务发现,原来sample这么详细啊,直接运行代码吧:

    package main
     
    import (
        "fmt"
        "time"
     
        "github.com/nacos-group/nacos-sdk-go/clients"
        "github.com/nacos-group/nacos-sdk-go/clients/naming_client"
        "github.com/nacos-group/nacos-sdk-go/common/constant"
        "github.com/nacos-group/nacos-sdk-go/model"
        "github.com/nacos-group/nacos-sdk-go/util"
        "github.com/nacos-group/nacos-sdk-go/vo"
    )
     
    func main() {
        sc := []constant.ServerConfig{
            {
                IpAddr: "192.168.100.30",
                Port:   8848,
            },
        }
        //or a more graceful way to create ServerConfig
        _ = []constant.ServerConfig{
            *constant.NewServerConfig("192.168.100.30", 8848),
        }
     
        cc := constant.ClientConfig{
            NamespaceId:         "e525eafa-f7d7-4029-83d9-008937f9d468", //namespace id
            TimeoutMs:           5000,
            NotLoadCacheAtStart: true,
            //LogDir:              "/tmp/nacos/log",
            //    CacheDir:            "/tmp/nacos/cache",
            RotateTime: "1h",
            MaxAge:     3,
            LogLevel:   "debug",
        }
        //or a more graceful way to create ClientConfig
        _ = *constant.NewClientConfig(
            constant.WithNamespaceId("e525eafa-f7d7-4029-83d9-008937f9d468"),
            constant.WithTimeoutMs(5000),
            constant.WithNotLoadCacheAtStart(true),
            //constant.WithLogDir("/tmp/nacos/log"),
            //constant.WithCacheDir("/tmp/nacos/cache"),
            constant.WithRotateTime("1h"),
            constant.WithMaxAge(3),
            constant.WithLogLevel("debug"),
        )
     
        // a more graceful way to create naming client
        client, err := clients.NewNamingClient(
            vo.NacosClientParam{
                ClientConfig:  &cc,
                ServerConfigs: sc,
            },
        )
     
        if err != nil {
            panic(err)
        }
     
        //Register with default cluster and group
        //ClusterName=DEFAULT,GroupName=DEFAULT_GROUP
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.10",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
            Metadata:    map[string]string{"idc": "shanghai"},
        })
     
        //Register with cluster name
        //GroupName=DEFAULT_GROUP
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.11",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            ClusterName: "cluster-a",
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
        })
     
        //Register different cluster
        //GroupName=DEFAULT_GROUP
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.12",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            ClusterName: "cluster-b",
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
        })
     
        //Register different group
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.13",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            ClusterName: "cluster-b",
            GroupName:   "group-a",
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
        })
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.14",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            ClusterName: "cluster-b",
            GroupName:   "group-b",
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
        })
     
        //DeRegister with ip,port,serviceName
        //ClusterName=DEFAULT, GroupName=DEFAULT_GROUP
        //Note:ip=10.0.0.10,port=8848 should belong to the cluster of DEFAULT and the group of DEFAULT_GROUP.
        ExampleServiceClient_DeRegisterServiceInstance(client, vo.DeregisterInstanceParam{
            Ip:          "10.0.0.10",
            Port:        8848,
            ServiceName: "demo.go",
            Ephemeral:   true, //it must be true
        })
     
        //DeRegister with ip,port,serviceName,cluster
        //GroupName=DEFAULT_GROUP
        //Note:ip=10.0.0.10,port=8848,cluster=cluster-a should belong to the group of DEFAULT_GROUP.
        ExampleServiceClient_DeRegisterServiceInstance(client, vo.DeregisterInstanceParam{
            Ip:          "10.0.0.11",
            Port:        8848,
            ServiceName: "demo.go",
            Cluster:     "cluster-a",
            Ephemeral:   true, //it must be true
        })
     
        //DeRegister with ip,port,serviceName,cluster,group
        ExampleServiceClient_DeRegisterServiceInstance(client, vo.DeregisterInstanceParam{
            Ip:          "10.0.0.14",
            Port:        8848,
            ServiceName: "demo.go",
            Cluster:     "cluster-b",
            GroupName:   "group-b",
            Ephemeral:   true, //it must be true
        })
     
        //Get service with serviceName
        //ClusterName=DEFAULT, GroupName=DEFAULT_GROUP
        ExampleServiceClient_GetService(client, vo.GetServiceParam{
            ServiceName: "demo.go",
        })
        //Get service with serviceName and cluster
        //GroupName=DEFAULT_GROUP
        ExampleServiceClient_GetService(client, vo.GetServiceParam{
            ServiceName: "demo.go",
            Clusters:    []string{"cluster-a", "cluster-b"},
        })
        //Get service with serviceName ,group
        //ClusterName=DEFAULT
        ExampleServiceClient_GetService(client, vo.GetServiceParam{
            ServiceName: "demo.go",
            GroupName:   "group-a",
        })
     
        //SelectAllInstance return all instances,include healthy=false,enable=false,weight<=0
        //ClusterName=DEFAULT, GroupName=DEFAULT_GROUP
        ExampleServiceClient_SelectAllInstances(client, vo.SelectAllInstancesParam{
            ServiceName: "demo.go",
        })
     
        //SelectAllInstance
        //GroupName=DEFAULT_GROUP
        ExampleServiceClient_SelectAllInstances(client, vo.SelectAllInstancesParam{
            ServiceName: "demo.go",
            Clusters:    []string{"cluster-a", "cluster-b"},
        })
     
        //SelectAllInstance
        //ClusterName=DEFAULT
        ExampleServiceClient_SelectAllInstances(client, vo.SelectAllInstancesParam{
            ServiceName: "demo.go",
            GroupName:   "group-a",
        })
     
        //SelectInstances only return the instances of healthy=${HealthyOnly},enable=true and weight>0
        //ClusterName=DEFAULT,GroupName=DEFAULT_GROUP
        ExampleServiceClient_SelectInstances(client, vo.SelectInstancesParam{
            ServiceName: "demo.go",
        })
     
        //SelectOneHealthyInstance return one instance by WRR strategy for load balance
        //And the instance should be health=true,enable=true and weight>0
        //ClusterName=DEFAULT,GroupName=DEFAULT_GROUP
        ExampleServiceClient_SelectOneHealthyInstance(client, vo.SelectOneHealthInstanceParam{
            ServiceName: "demo.go",
        })
     
        //Subscribe key=serviceName+groupName+cluster
        //Note:We call add multiple SubscribeCallback with the same key.
        param := &vo.SubscribeParam{
            ServiceName: "demo.go",
            Clusters:    []string{"cluster-b"},
            SubscribeCallback: func(services []model.SubscribeService, err error) {
                fmt.Printf("callback111 return services:%s 
    
    ", util.ToJsonString(services))
            },
        }
        ExampleServiceClient_Subscribe(client, param)
        param2 := &vo.SubscribeParam{
            ServiceName: "demo.go",
            Clusters:    []string{"cluster-b"},
            SubscribeCallback: func(services []model.SubscribeService, err error) {
                fmt.Printf("callback222 return services:%s 
    
    ", util.ToJsonString(services))
            },
        }
        ExampleServiceClient_Subscribe(client, param2)
        ExampleServiceClient_RegisterServiceInstance(client, vo.RegisterInstanceParam{
            Ip:          "10.0.0.112",
            Port:        8848,
            ServiceName: "demo.go",
            Weight:      10,
            ClusterName: "cluster-b",
            Enable:      true,
            Healthy:     true,
            Ephemeral:   true,
        })
        //wait for client pull change from server
        time.Sleep(10 * time.Second)
     
        //Now we just unsubscribe callback1, and callback2 will still receive change event
        ExampleServiceClient_UnSubscribe(client, param)
        ExampleServiceClient_DeRegisterServiceInstance(client, vo.DeregisterInstanceParam{
            Ip:          "10.0.0.112",
            Ephemeral:   true,
            Port:        8848,
            ServiceName: "demo.go",
            Cluster:     "cluster-b",
        })
        //wait for client pull change from server
        time.Sleep(10 * time.Second)
     
        //GeAllService will get the list of service name
        //NameSpace default value is public.If the client set the namespaceId, NameSpace will use it.
        //GroupName default value is DEFAULT_GROUP
        ExampleServiceClient_GetAllService(client, vo.GetAllServiceInfoParam{
            PageNo:   1,
            PageSize: 10,
        })
     
        ExampleServiceClient_GetAllService(client, vo.GetAllServiceInfoParam{
            NameSpace: "0e83cc81-9d8c-4bb8-a28a-ff703187543f",
            PageNo:    1,
            PageSize:  10,
        })
    }
     
    /*--------------------------------------------------------------------------*/
    func ExampleServiceClient_RegisterServiceInstance(client naming_client.INamingClient, param vo.RegisterInstanceParam) {
        success, _ := client.RegisterInstance(param)
        fmt.Printf("RegisterServiceInstance,param:%+v,result:%+v 
    
    ", param, success)
    }
     
    func ExampleServiceClient_DeRegisterServiceInstance(client naming_client.INamingClient, param vo.DeregisterInstanceParam) {
        success, _ := client.DeregisterInstance(param)
        fmt.Printf("DeRegisterServiceInstance,param:%+v,result:%+v 
    
    ", param, success)
    }
     
    func ExampleServiceClient_GetService(client naming_client.INamingClient, param vo.GetServiceParam) {
        service, _ := client.GetService(param)
        fmt.Printf("GetService,param:%+v, result:%+v 
    
    ", param, service)
    }
     
    func ExampleServiceClient_SelectAllInstances(client naming_client.INamingClient, param vo.SelectAllInstancesParam) {
        instances, _ := client.SelectAllInstances(param)
        fmt.Printf("SelectAllInstance,param:%+v, result:%+v 
    
    ", param, instances)
    }
     
    func ExampleServiceClient_SelectInstances(client naming_client.INamingClient, param vo.SelectInstancesParam) {
        instances, _ := client.SelectInstances(param)
        fmt.Printf("SelectInstances,param:%+v, result:%+v 
    
    ", param, instances)
    }
     
    func ExampleServiceClient_SelectOneHealthyInstance(client naming_client.INamingClient, param vo.SelectOneHealthInstanceParam) {
        instances, _ := client.SelectOneHealthyInstance(param)
        fmt.Printf("SelectInstances,param:%+v, result:%+v 
    
    ", param, instances)
    }
     
    func ExampleServiceClient_Subscribe(client naming_client.INamingClient, param *vo.SubscribeParam) {
        client.Subscribe(param)
    }
     
    func ExampleServiceClient_UnSubscribe(client naming_client.INamingClient, param *vo.SubscribeParam) {
        client.Unsubscribe(param)
    }
     
    func ExampleServiceClient_GetAllService(client naming_client.INamingClient, param vo.GetAllServiceInfoParam) {
        service, _ := client.GetAllServicesInfo(param)
        fmt.Printf("GetAllService,param:%+v, result:%+v 
    
    ", param, service)
    }

    运行结果:

     

    windows技术爱好者
  • 相关阅读:
    ssm(spring+springmvc+mybatis)整合之环境配置
    OD机试题
    openpyxl 读取多个excle中的数据并保存到List中
    Python比较2个字典有哪些值不一致
    Python 正则表达式 匹配小数
    开始入驻博客园,审批神速,赞
    VUE入门实例
    VUE使用axios调用后台API接口
    Redis、Memcached和Tair,同为分布式缓存Redis为何更胜一筹?
    Redis可以用作消息队列吗?
  • 原文地址:https://www.cnblogs.com/majiang/p/14604111.html
Copyright © 2011-2022 走看看