本文次要钻研一下nacos-coredns-plugin的Domain

Domain

nacos-coredns-plugin/nacos/nacos_domain.go

type Domain struct {    Name string `json:"dom"`    Clusters string    CacheMillis int64    LastRefMillis int64    Instances []Instance `json:"hosts"`    Env string    TTL int}func (domain Domain) getInstances() ([]Instance) {    return domain.Instances}func (domain Domain) String() string {    b, _ := json.Marshal(domain)    return string(b)}func (domain Domain) SrvInstances() []Instance {    var result = make([]Instance, 0)    hosts := domain.getInstances()    for _, host := range hosts {        if host.Valid && host.Weight > 0 {            for i := 0; i < int(math.Ceil(host.Weight)); i++ {                result = append(result, host)            }        }    }    if len(result) <= 0{        panic("no host to srv: " + domain.Name)    }    return result}
Domain定义了Name、Clusters、CacheMillis、LastRefMillis、Instances、Env、TTL属性;它提供了getInstances、String、SrvInstances办法;其中SrvInstances办法依据instance的权重来返回对应个数的instance

实例

nacos-coredns-plugin/nacos/nacos_domain_test.go

func TestDomain_SrvInstances(t *testing.T) {    domain := Domain{}    domain.CacheMillis = 10000    domain.Clusters = "DEFAULT"    //test weight    domain.Instances = []Instance{Instance{IP: "2.2.2.2", Port: 80, Weight: 2, AppUseType: "publish", Valid: true, Site: "et2"}}    instances := domain.SrvInstances()    if len(instances) == 2 {        t.Log("Domain.srvInstances weight passed.")    }    //test valid    defer func() {        if err := recover(); err != nil {            if strings.HasPrefix(err.(string), "no host to srv: ") {                t.Log("Domain.srvInstances valid passed.")            }        }    }()    domain.Instances = []Instance{Instance{IP: "2.2.2.2", Port: 80, Weight: 2, AppUseType: "publish", Valid: false, Site: "et2"}}    domain.SrvInstances()}
这里设置instances为一个weight为2的instance,而后通过SrvInstances办法返回2个instance

小结

nacos-coredns-plugin的Domain定义了Name、Clusters、CacheMillis、LastRefMillis、Instances、Env、TTL属性;它提供了getInstances、String、SrvInstances办法。

doc

  • nacos-coredns-plugin