今日在家里电脑(windows 10)测试go-micro时发现github.com/micro/examples/service居然出现请求不到的情况,出现408或500错误
本地环境go version go1.12.6 windows/amd64
protoc
protoc-gen-go
protoc-gen-micro
需要用到的工具链都是最新的
windows 10环境下测试了很多次都是同样的错误,很奇怪
以前也在同一台电脑上测试都是正常的,没有出现过问题啊
猜测有可能是不同版本proto又差异的问题,先重新生成proto协议文件,执行
protoc --micro_out=. --go_out=. greeter.proto
生成后再测试还是同样问题,看来问题不在这里
然后编译成linux版二进制文件,放到下虚拟机下Ubuntu中执行,是可以调用成功的
说明代码是没问题的,可能是windows 10环境哪里出现问题了
windows环境下
service执行如下
client执行如下
默认情况下micro使用的服务发现是mdns,无需任何配置,
执行micro web看下具体信息
可以看到,greeter确实是注册上了,那我们直接在界面调用一下试试
还是一样的结果,那在详细看下服务注册信息
也可以在命令行执行
micro get service greeter
可以看到注册的服务发现是mdns,但是这个ip地址有些奇怪,
我本地局域网的IP是192.168.31.x,他怎么会注册到10网段去呢,怪不得调用一直timeout
先看看本地的网络连接信息吧
启用的几个网络连接中,禁用的不用管,另外4个分别是
SSTAP 1 安装公司vpn后产生的,网络安全原因,连入公司vpn需安装vpn软件并插入usb key
vEthernet (Default Switch) 安装docker后产生的,172.17网段
WLAN 2 电脑上网的无线网卡,192.168.31.x网段
以太网 3 virtualbox虚拟机网卡,192.168.56.x网段
看起来SSTAP 1 最可疑了,禁用此网卡后重新启动service,在观察服务注册
ip变成了192.168.56.1 ,看来是走的【以太网 3】网络,调用服务试一下
调用成功了,micro web页面测试也同样成功
后面测试吧服务器注册换成consul,启动服务和调用时加上--registry=consul测试,也是同样的情况
所以造成这个问题的原因就是go-micro默认使用的网络连接问题了,只要将有问题的禁用掉即可
那不方便禁用网络连接的情况下怎么解决呢,只需要指定--server_address即可,如下
go run main.go --server_address=localhost:8999
经测试不禁用网络连接的情况下,指定--server_address,服务也可正常调用
micro有很多参数可以通过命令行或代码中option来设置,具体可以micro -h 查看
有疑问加站长微信联系(非本文作者)