聊聊nacos-coredns-plugin的Domain


本文摘自网络,作者,侵删。

本文主要研究一下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

本文来自:Segmentfault

感谢作者:codecraft

查看原文:聊聊nacos-coredns-plugin的Domain

相关阅读 >>

介绍一个超好用的orm库Gorm【Golang 入门系列十二】

聊聊promtail的client

Go modules构建项目

Go语言如何删除切片元素

Golang select不阻塞吗

我用Go-zero开发了第一个线上项目

Golang fyne 使用中文并打包进二进制文件

手撸Golang 行为型设计模式 模板方法模式

必须掌握的Golang23种设计模式之工厂方法模式

Golang 和 js 怎么交互?

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...