1. 安装protoc-gen-micro
Go Micro默认使用protobuf作为通信协议的定义,故需要安装protoc-gen-micro来生成服务的接口代码,这样省去了很多重复的编码工作,同时也保证了代码的准确性。protoc-gen-micro依赖于protoc和protoc-gen-go。
第一步,安装protoc
下载https://github.com/protocolbuffers/protobuf/releases,解压,并把路径加到path里,验证
protoc --version
第二步,安装protoc-gen-go
go get -u github.com/golang/protobuf/protoc-gen-go
指令执行成功后,查看GOPATH/bin下,就能看到protoc-gen-go文件。
第三步,安装protoc-gen-micro
go get github.com/micro/protoc-gen-micro
执行完成后,我们验证一下:创建一个test.proto文件,执行如下命令,生成两个文件则成功。
protoc --proto_path=./ --micro_out=. --go_out=. test.proto
2. 安装Go Micro
GO111MODULE=on go get github.com/micro/go-micro/v3@latest
3. 安装Micro
Micro是提供给Go Micro的运行时工具,用于部署和运维。
GO111MODULE=on go get github.com/micro/micro/v3@latest
但是,通过该方法安装的micro默认使用的服务发现组件是mdns,没有集成Consul、Etcd等第三方的组件。我们后面需要使用Consul,所以此时需要自己手动编译安装:
首先,直接从github拉取代码:
cd $GOPATH/src
git clone https://github.com/micro/micro.git
cd micro
然后,新建plugins.go文件:
package main
import(
_"github.com/micro/go-plugins/registry/consul/v3"
)
最后,重新编译安装:
go install
完成后,执行如下指令:
micro --version
登录micro:
micro login --username admin --password micro
创建服务参看:https://learnku.com/docs/go-micro/3.x/create-services/9335
4. 安装Consul
mac可以用brew安装,安装完后web访问:http://localhost:8500/
常用的指令有:
consul agent # 启动代理服务
consul members # 查询代理服务列表
consul leave # 关闭代理服务
5. 开发server端代码
package main
import (
"context"
"fmt"
"github.com/asim/go-micro/v3"
"go-agent/blueware"
"go-agent/examples/gomicro/proto"
)
var appblueware.Application
type Greeterstruct {
}
func (g *Greeter)SayHello(ctxcontext.Context, in *proto.HelloRequest, out *proto.HelloReply)error {
name := in.GetName()
if txn :=blueware.FromContext(ctx); nil != txn {
txn.AddAttribute("Name", name)
}
fmt.Println("Request received from", name)
out.Message ="hello " + in.GetName()
return nil
}
func main() {
//监控代码,初始化应用
iniFilePath :="blueware_agent.yaml"
config := &blueware.Config{}
var errerror
app, config, err =blueware.NewApplication(iniFilePath)
if nil != err {
fmt.Println(err)
}
fmt.Println(config)//TODO
//业务代码
// create a new service
service :=micro.NewService(
micro.Name("helloworld"),
micro.Address(":8081"),
//micro.WrapHandler(oneapm_gomicro.HandlerWrapper(app)), //插入监控代码
)
proto.RegisterGreeterHandler(service.Server(), new(Greeter))
// initialise flags
service.Init()
// start the service
service.Run()
}
启动server服务:go run main.go
6. 访问server端代码
终端输入:micro call greeter Greeter.SayHello '{"name": "John"}'
返回:{ "message": "hello John" }