毕设,这两天在学习用Go+【Consul】实现服务注册和发现,结果【Consul】的健康检查一直无效,甚至连Output也什么没提示,折腾两天没搞明白 T-T,Google上也没能找到类似情况
Win10系统;
VirtualBox + Xshell的虚拟机;
虚拟机上docker;
docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client=0.0.0.0

const (
consulAddress = "192.168.31.65:8500" // 虚拟机ip
localIp = "192.168.31.197" // 本地ip
localPort = 81
)
func consulRegister() {
// 创建连接consul服务配置
config := consulapi.DefaultConfig()
config.Address = consulAddress
client, err := consulapi.NewClient(config)
if err != nil {
fmt.Println("consul client error : ",err)
}
// 创建注册到consul的服务
registration := new(consulapi.AgentServiceRegistration)
registration.ID = "337"
registration.Name = "service337"
registration.Port = localPort
registration.Tags = []string{"testService"}
registration.Address = localIp
// 增加consul健康检查回调函数
check := new(consulapi.AgentServiceCheck)
check.HTTP = fmt.Sprintf("https://%s:%d",registration.Address,registration.Port)
check.Timeout = "5s"
check.Interval = "5s"
check.DeregisterCriticalServiceAfter = "30s" // 失败后自动删除
registration.Check = check
// 注册服务到consul
err = client.Agent().ServiceRegister(registration)
}
func Handler(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("you are visiting healch check api"))
}
func main() {
consulRegister()
// 定义一个http接口
http.HandleFunc("/",Handler)
err := http.ListenAndServe("0.0.0.0:81",nil)
if err != nil {
fmt.Println("error: ", err.Error())
}
}
在虚拟机
ping 192.168.31.197(本地ip) // 可以ping通
在win10 cmd
ping 192.168.31.65(虚拟机ip) // 可以ping通
如果你有眉目,请在下面评论,真的感谢了,折腾很久了 T T
@djqueue
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。