今天因为配置go-micro中使用consul作为服务发现踩了一天的坑,最后终于成功解决
1.安装go-micro(windows)
# 安装go-micro
go get -u -v github.com/micro/go-micro
# 安装工具集
go get -u -v github.com/micro/micro
# 安装protobuf插件
go get -u -v github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u -v github.com/micro/protoc-gen-micro
2.创建micro服务
因为最新版本的go-micro已经弃用了consul,默认使用etcd做服务注册,所以我们需要额外引入consul
micro new --type srv mserver -- 创建一个微服务项目
protoc --proto_path=. --go_out=. --micro_out=. proto/mserver/mserver.proto -- 编译proto文件
## ps如果找不到consul的话就用以下路径
github.com/micro/go-plugins/registry/consul
3.搭建好的go-micro服务的main.go文件
package main
import (
"github.com/micro/go-micro/util/log"
"github.com/micro/go-micro"
"mserver/handler"
"mserver/subscriber"
"github.com/micro/go-plugins/registry/consul"
mserver "mserver/proto/mserver"
)
func main() {
// 初始化服务发现
consulReg := consul.NewRegistry()
// New Service
service := micro.NewService(
micro.Name("go.micro.srv.mserver"),
micro.Registry(consulReg),
micro.Version("latest"),
)
// Initialise service
service.Init()
// Register Handler
mserver.RegisterMserverHandler(service.Server(), new(handler.Mserver))
// Register Struct as Subscriber
micro.RegisterSubscriber("go.micro.srv.mserver", service.Server(), new(subscriber.Mserver))
// Register Function as Subscriber
micro.RegisterSubscriber("go.micro.srv.mserver", service.Server(), subscriber.Handler)
// Run service
if err := service.Run(); err != nil {
log.Fatal(err)
}
}