/*
Copyright (c) [2023] [squallzhao]
fountain is licensed under APACHE LICENSE, VERSION 2.0.
You can use this software according to the terms and conditions of the APACHE LICENSE, VERSION 2.0.
You may obtain a copy of APACHE LICENSE, VERSION 2.0 at: https://www.apache.org/licenses/LICENSE-2.0
*/
package microservice.registry;
import std.io.*
import encoding.json.*
import net.http.*
import microservice.trace.*
public class NacosRegistry <: IRegistry{
var cfg: Config = Config()
let client = ClientBuilder().build()
let localIp = getLocalIp()
public func config(cfg: Config): IRegistry{
this.cfg = cfg
return this;
}
public func register(serviceName: String, port: Int64): Bool{
var b = ByteArrayStream()
b.write("".toArray())
var req = HttpRequestBuilder().method("POST")
.url(cfg.url+"/nacos/v1/ns/instance?serviceName="+serviceName+"&ip="+localIp+"&port={port}")
.header("Content-Type","application/json")
.body(b)
.build()
let v = client.send(req)
return true
}
public func deregister(serviceName: String, port: Int64): Bool{
var b = ByteArrayStream()
b.write("".toArray())
var req = HttpRequestBuilder().method("DELETE")
.url(cfg.url+"/nacos/v1/ns/instance?serviceName="+serviceName+"&ip="+localIp+"&port={port}")
.header("Content-Type","application/json")
.body(b)
.build()
let v = client.send(req)
return true
}
public func heartBeat(serviceName: String, port: Int64): Bool{
var req = HttpRequestBuilder().method("GET")
.url("/nacos/v1/ns/health/instance?serviceName="+serviceName)
.header("Content-Type","application/json")
.header("Accept","application/json")
.build()
let v = client.send(req)
return true
}
public func discovery(serviceName: String): String{
var req = HttpRequestBuilder().method("GET")
.url("/nacos/v1/ns/instance/list?serviceName="+serviceName)
.header("Content-Type","application/json")
.header("Accept","application/json")
.build()
let v = client.send(req)
//return String.fromUtf8(v.readToEnd())
return StringReader(v.body).readToEnd()
}
}