Micro解决了构建云本地系统的关键需求。它采用了微服务体系结构模式,并将其转换为一组工具,作为可伸缩平台的构建块。Micro隐藏了分布式系统的复杂性,并为开发人员提供了很好的理解概念。
Micro是一个专注于简化分布式系统开发的微服务生态系统。是一个工具集合, 通过将微服务架构抽象成一组工具。
隐藏了分布式系统的复杂性,为开发人员提供了更简洁的概念。
Go Micro跟其他工具最大的不同是它是插件化的架构,这让上面每个包的具体实现都可以切换出去。举个例子,默认的服务发现的机制是通过Consul,但是如果想切换成etcd或者zookeeper 或者任何你实现的方案,都是非常便利的。
go get github.com/micro/go-micro
go get github.com/micro/micro
go get github.com/micro/protoc-gen-micro
protoc --go_out=plugins=micro:. hello.proto
protoc --proto_path=. --micro_out=. --go_out=. hello.proto
package main
import (
"context"
"github.com/micro/go-micro"
"fmt"
pb "hello01/myproto"
"log"
)
type Greeter struct {
}
func (g*Greeter)Hello(ctx context.Context, rep *pb.HelloRequest, rsp *pb.HelloResponse) error {
rsp.Greeting="Hello"+rep.Name
return nil
}
func main() {
service := micro.NewService(
micro.Name("greeter"),
micro.Version("latest"),
micro.Metadata(map[string]string{"type": "hello"}))
service.Init()
e := pb.RegisterGreeterHandler(service.Server(), new(Greeter))
if e!=nil {
fmt.Println("注册服务出现",e)
return
}
if err:=service.Run();err!=nil{
log.Println("err")
}
}
package main
import (
pb "hello01/myproto"
"fmt"
"github.com/micro/go-micro"
"golang.org/x/net/context"
)
func main() {
service := micro.NewService(
micro.Name("greeter"),
micro.Version("latest"),
micro.Metadata(map[string]string{"type": "hello"}))
service.Init()
greeter := pb.NewGreeterService("greeter", service.Client())
res := pb.HelloRequest{}
res.Name = "wilson"
rsp, err := greeter.Hello(context.TODO(), &res) //Client API for Greeter service
if err != nil {
fmt.Println("请求服务出现了问题...", err)
return
}
fmt.Println("服务返回的结果为:", rsp.Greeting)
}