go-micro
https://github.com/micro/go-micro
Micro是一个用来简化微服务开发的框架,它为开发分布式应用程序提供了基本的构建模块。
提供的主要软件是Micro,一个微服务工具包,包含以下组件:
Go Micro - 基于Golang的插件式RPC框架,提供服务发现,客户端负载均衡,编码,同步和异步通讯功能。
API - API Gateway(API 网关), 用来提供处理http请求。
Sidecar - 用来接入其他语言编写的应用到Micro中。
Web - 提供一个web dashboard,并且可以为Micro应用提供反向代理。
CLI - 用来跟Micro服务交互的命令行工具。
Bot - 用它我们可以在我们的服务中与Slack, HipChat, XMPP通讯。
Go-Mirco是一个独立的库,可以独立于其他工具包使用。
由于Micro的服务发现并没有自己实现,仅仅是提供Plugin来接入第三方服务发现(consul, etcd), 默认使用的是consule
demo
- 创建服务
micro new [service]
生成的服务会被放到$GOPATH的相对目录下
example/
Dockerfile # A template docker file
README.md # A readme with command used
handler/ # Example rpc handler
main.go # The main Go program
proto/ # Protobuf directory
subscriber/ # Example pubsub Subscriber
- 创建一个proto文件
syntax = "proto3";
service HelloWorld {
rpc Hello(HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string greeting = 2;
}
- 编译:protoc --go_out=plugins=micro:. hello_world.proto
- 生成服务
package main
import (
"fmt"
"leaning01/hello_world" // import proto生成的类
"github.com/micro/go-micro"
"golang.org/x/net/context"
)
type HelloWorld struct{}
func (g *HelloWorld) Hello(ctx context.Context, req *hello_world.HelloRequest, rsp *hello_world.HelloResponse) error {
rsp.Greeting = "Hello World: " + req.Name
return nil
} // 实现hello_world service中Hello方法
func main() {
service := micro.NewService(
micro.Name("hello_world"), // 定义service的名称为hello_world
micro.Version("latest"),
micro.Metadata(map[string]string{
"type": "helloworld",
}),
)
service.Init() // 初始化service
hello_world.RegisterHelloWorldHandler(service.Server(), new(HelloWorld)) // 注册服务
if err := service.Run(); err != nil {
fmt.Println(err)
} // 运行服务
}
-
http请求访问:
启动 micro web
micro 自带了一个控制台 ,可以查看所有服务和接口
http://localhost:8082/
在 micro web页面 打开检查 然后在network下面拿到 刚刚的rpc 连接 然后 copy
用post方法 设置下面参数进行访问//例: url:http://localhost:8082/rpc headers:Content-type: application/json body:{“service”:”mymicro”,”method”:”TestUser.GetUser”,”request”:{}}