一种软件体系结构模式,用于将大型单块应用程序分解为更小、可管理的独立服务,这些服务通过语言无关协议进行通信,每个服务的重点做好一件事
微服务的概念并不新鲜,这是对服务导向架构的重新构想,但其方法更整体地与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:是该接口提供的方法