一种软件体系结构模式,用于将大型单块应用程序分解为更小、可管理的独立服务,这些服务经过语言无关协议进行通讯,每一个服务的重点作好一件事前端
微服务的概念并不新鲜,这是对服务导向架构的从新构想,但其方法更总体地与unix进程和管道保持一致。linux
微服务架构的理念:git
好处:github
Micro解决了构建微服务系统的关键要求。它采用微服务架构模式并将其转换为一组工具,由如下功能组成:golang
go-micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通讯。web
主要功能。json
安装go语言环境,并开启go module功能,能够设置 GOPROXY=https://goproxy.io 环境变量能够永久加速下载包。在环境变量path添加一行配置 %GOPATH%bin这样能够在 go get 的时候安装的软件能够直接使用,不须要切换路径,GOPATH:是工做空间目录后端
临时加速,只在当前控制台有效:api
1,下载proto,选择本身须要的版本解压放在 %GOPATH%bin下,方便管理:服务器
https://github.com/protocolbuffers/protobuf/releases
2,安装protoc-gen-go:
go get -u github.com/golang/protobuf/protoc-gen-go
3,安装micro:
go get github.com/micro/micro
go mod init module名:用于建立go module项目module名:建议和父文件夹的名字相同
在桌面新建文件夹 demo
自定义一个文件夹:打开cmd
进入桌面上的demo
后,运行 go mod init demo,
运行完后新建handler,proto/hello文件夹,以及main.go文件
目录结构定义为:
demo -handler -proto --hello main.go go.mod
在proto/hello下新建 hello.proto文件,内容以下
syntax = "proto3"; // 定义protobuf版本 //定义接口 service Hello { rpc Say (SayRequest) returns (SayResponse); //定义接口方法 } // SayRequest,SayResponse:能够为不一样接口定义输入输出参数 message SayRequest { string name = 1; } message SayResponse { string msg = 1; }
打开cmd
进入proto/hello下 编译proto文件:
protoc --micro_out=. --go_out=. hello/hello.proto
而后就会产生两个文件,hello.micro.go,hello.pb.go
在handler下,新建hello_handler.go文件
package handler import ( "context" pb "demo/proto/hello"//proto文件的路径 ) type hello struct{} func NewHelloApi() pb.HelloHandler { return &hello{} } func (self *hello) Say(ctx context.Context, req *pb.SayRequest, resp *pb.SayResponse) error { resp.Msg = "hello " + req.Name return nil }
编写main:
package main import ( "fmt" "github.com/micro/go-micro" "log" "demo/handler" hello_api "demo/proto/hello" ) const ( ServiceName = "demo.api" ) func main() { service := micro.NewService( micro.Name(ServiceName), micro.Version("1.0.0"), ) service.Init() //挂载服务 err := hello_api.RegisterHelloHandler(service.Server(), handler.NewHelloApi()) if err != nil { fmt.Println(err) } // 启动api服务 if err := service.Run(); err != nil { log.Fatal(err) } }
更新依赖:
go mod tidy
运行:
go run main.go
使用 micro提供的工具
micro call demo.api Hello.Say '{"name":"John"}'
使用 postman
运行 网关:
micro api --namespace=demo
测试接口
运行网关的时候:添加namespace这个参数,该参数值( demo)和 ServiceName(demo.api)的前缀必需要一致,然后面的字符就是访问该服务的前缀 ,例如:api ,因此经过网关访问就是:http://127.0.0.1:8080/api/hello/say,
hello:是定义的接口,
say:是该接口提供的方法