问题遇到的现象
毕设,这两天在学习用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


的代码
import (
"fmt"
consulapi "github.com/hashicorp/consul/api"
"net/http"
)
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通
最主要的是,这里的 Output 什么也没提示啊?

如果你有眉目,请在下面评论,真的感谢了,折腾很久了 T T
@djqueue