나코스-coredns-plugin의 Domain에 대해서 얘기를 해볼게요.
2514 단어 golang
본고는 주로 나코스-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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
set containerThere is no built-in set container in Go How to implement Set struct{} => type struct{}{} => 0bytes How to create set :=...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.