乐趣区

gomicro-调用接口408或500问题排查

今日在家里电脑(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 查看

退出移动版