一种软件体系结构模式,用于将大型单块应用程序分解为更小、可管理的独立服务,这些服务通过语言无关协议进行通信,每个服务的重点做好一件事
微服务的概念并不新鲜,这是对服务导向架构的重新构想,但其方法更整体地与unix进程和管道保持一致。
微服务架构的理念:
好处:
Micro解决了构建微服务系统的关键要求。它采用微服务架构模式并将其转换为一组工具,由以下功能组成:
go-micro提供了分布式系统开发的核心要求,包括RPC和事件驱动的通信。
主要功能。
安装go语言环境,并开启go module功能,可以设置 GOPROXY= https://goproxy.io 环境变量可以永久加速下载包。在环境变量path添加一行配置 %GOPATH%bin 这样可以在 go get 的时候安装的软件可以直接使用,不需要切换路径, GOPATH :是工作空间目录
临时加速,只在当前控制台有效:
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
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:是该接口提供的方法