很长一段时间没有写博客了,最近是有些迷茫了,又有些其他的事情耽误了许多时间,所以我今天停下来想写片博文让自己冷静一下。说一下我最近正在研发的东西吧:最近我正在研发一个基于golang聊天服务,然后使用的是rpc框架go-micro,中途实在遇到很多问题,在慢慢理顺的途中我准备记录一下。咱单刀直入吧,我也不赘述什么是go-micro,什么是proto,什么是rpc了,这些东西网上还是很多的。
首先建议大家多查查github上面的解答
我也看了一些资料,在github上面还是能寻到蛛丝马迹的。建议看一下这个问题https://github.com/micro-in-cn/questions/issues/17,几位大佬分析的挺透彻,但是有个问题,这玩意要安装的东西太多,然后版本还不能错,我就一直运行不了go build -o github.com/micro/micro 所以,也没能用起来micro这个插件。
为什么会出现not found service 呢,我是直接在gomicro 的官网文档https://micro.mu/docs/cn/go-micro.html 运行的实例,直接按照官方文档来肯定是运行不了的。
我的环境:
本地环境go version go1.13.1 windows/amd64
protoc
protoc-gen-go
protoc-gen-micro
注册中心使用的是consul,因为网上现成的案例还是比较多的,所以才选择这个,其他高大上的理由我也想不太出来了。基本上的包都是翻墙出去下的,基本上还是没太大的问题
我的步骤
1.编译proto文件
我喜欢将proto文件分开放
protoc --proto_path=lib/proto --go_out=lib/microgo --micro_out=lib/microgo lib/proto/chat.proto
这里需要单独安装protoc的插件
创建后就显示为下面的目录,生成出来的文件放在了microgo文件夹下
2.服务进行注册
1.官方实例是
go run main.go 这种注册中心默认问mdns
2.我最开始使用的是这种,但是也能在consul找到对应的服务
go run main.go --registry=consul 只是将注册中心改成为consul
3.运行成功后我使用的是,只是我指定了运行端口
go run main.go --registry=consul --server_address=localhost:8888
上面大家基本应该可以看出来了,就是指定和默认注册地址问题,让服务clent报500,408错误,如果直接利用编辑器运行,没有带任何的flag的时候就会not found service 500错误。如果服务注册的时候没有指明server_address的话调用时候就会报错408
调用案例
报错500
go run client.go 这里会报500错误
正确调用
go run client.go --registry=consul
go run client.go --registry=consul --server_address=localhost:8888
错误原因;
主要发现在服务注册的时候,micro会自动注册到默认网段,可以看一下这个人的分析https://studygolang.com/articles/22906,
有疑问加站长微信联系(非本文作者)