Micro
是一套微服务构建工具库。对于微服务架构的应用,Micro
提供平台层面、高度弹性的工具组件,让服务开发者们可以把复杂的分布式系统以简单的方式构建起来,并且尽可能让开发者使用最少的时间完成基础架构的构建。
Go-micro
是独立的RPC
框架,它是micro
工具集的核心。下面通过常用方法看下其核心功能是怎么工作的,来看一个micro
服务端的代码片段
// 服务端
func main() {
service := micro.NewService(micro.Name("go.micro.srv.greeter"))
service.Init()
hello.RegisterSayHandler(service.Server(), new(Say))
if err := service.Run(); err != nil {
log.Fatal(err)
}
}
micro.NewService
NewService
根据其中的包,创建并返回一个新服务。
func NewService(opts ...Option) Service {
return newService(opts...)
}
func newService(opts ...Option) Service {
options := newOptions(opts...)
options.Client = &clientWrapper{
options.Client,
metadata.Metadata{
HeaderPrefix + "From-Service": options.Server.Options().Name(),
},
}
return &service{
opts: options,
}
}
传入参数用来设置服务的一些属性,例如使用的中间件,注册中心,服务有关属性等。上例中设置了服务的名称。
func Name(n string) Option {
return func(o *Options) {
o.Server.Init(server.Name(n))
}
}
注意: 这里的服务名称必须和micro
客户端编写的服务名称相一致,不然会无法正常访问。例如服务端定义的服务名字为go.micro.srv.greeter
,而客户端定义的服务名称为go.micro.client
。那么在调用时就会出现下面的错误。
{
"id": "go.micro.client",
"code": 500