go-micro+consul+gin
安装(前提是本地已安装protobuf和protof的go扩展)
go get github.com/micro/micro
go get github.com/micro/go-micro
go get github.com/micro/protoc-gen-micro
go get github.com/micro/go-plugins/registry/consul
支持consul需要单独安装这个包
go get github.com/micro/go-plugins/registry/consul
micro生成新项目
micro new --gopath=false --type=srv micpro
进入到 proto文件的同级目录,然后执行以下命令生成go文件
protoc --micro_out=. --go_out=. *.proto
package main import ( "github.com/micro/go-micro" "github.com/micro/go-micro/util/log" "github.com/micro/go-plugins/registry/consul" "micpro/handler" micpro "micpro/proto/micpro" ) func main() { consulRegis := consul.NewRegistry() // New Service service := micro.NewService( micro.Name("go.micro.srv.micpro"), micro.Version("latest"), micro.Registry(consulRegis), micro.Address("127.0.0.1:10345"), ) // Initialise service service.Init() // Register Handler micpro.RegisterMicproHandler(service.Server(), new(handler.Micpro)) // Run service if err := service.Run(); err != nil { log.Fatal(err) } }
将micro框架proto目录下的文件拷贝到gin目录下,然后在main.go中使用consul
package main import ( context2 "context" "fmt" micpro "gintemp/proto/micpro" "github.com/gin-gonic/gin" "github.com/micro/go-micro" "github.com/micro/go-micro/client" "github.com/micro/go-plugins/registry/consul" "time" ) func microCall(context *gin.Context){ reg := consul.NewRegistry() service := micro.NewService(micro.Registry(reg)) micServ := micpro.NewMicproService("go.micro.srv.micpro",service.Client()) res,err := micServ.Call(context2.TODO(),&micpro.Request{Name:"mayuan"},func(o *client.CallOptions) { o.RequestTimeout = time.Second * 30 o.DialTimeout = time.Second * 30 }) if err != nil{ fmt.Println(err) } context.Writer.WriteString(res.Msg) } func main() { route := gin.Default() route.GET("/", microCall) route.Run(":8080") }