Go Micro

安装依赖

  Go Micro  

1
$ go get github.com/micro/go-micro

  

  Protobuf (如果您使用代码生成,您还需要使用protoc-gen-go)

1
$ go get github.com/micro/protobuf/{proto,protoc-gen-go}

  

  工具包 (Micro工具包提供了访问微服务的各种方法)

1
$ go get github.com/micro/micro

  

  Docker (可用预制docker images)

1
$ docker pull microhq/micro

  

  尝试CLI

    运行greeter服务
1
$ go get github.com/micro/examples/greeter/srv && srv

 

    服务清单
1
2
3
$ micro list services
consul
go.micro.srv.greeter

  

   获取服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ micro get service go.micro.srv.greeter
service  go.micro.srv.greeter
 
version 1.0.0
 
Id  Address Port    Metadata
go.micro.srv.greeter-34c55534-368b-11e6-b732-68a86d0d36b6   192.168.1.66    62525   server=rpc,registry=consul,transport=http,broker=http
 
Endpoint: Say.Hello
Metadata: stream=false
 
Request: {
    name string
}
 
Response: {
    msg string
}

  

    查询服务 
1
2
3
4
$ micro query go.micro.srv.greeter Say.Hello '{"name": "John"}'
{
    "msg": "Hello John"
}

  

    调用服务
1
2
3
4
5
6
7
$ micro call hello Greeter.Greet '{"name":"SngZhibin","msg":"null"}'
{
        "name": "SngZhibin",
        "msg": "SngZhibin您好"
}
 
// hello是服务名 Greeter.Greet是.proto中定义的服务

  

创建服务实例 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// demo.proto
 
syntax = "proto3"; // 指定版本
package pb; // 包名
 
message Request {
    string name = 1;
    string msg = 2;
}
message Response {
    string name = 1;
    string msg = 2;
}
service Greeter {
    // 服务
    rpc Greet (Request) returns (Response) {
    }
}

  

使用protoc工具生成对应代码后服务代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 服务代码
package main
 
import (
    "Songzhibin/raftRealize/microDemo/pb"
    "context"
    "fmt"
    "github.com/micro/go-micro"
)
 
// 自定义结构体
type server struct{}
 
func (s server) Greet(ctx context.Context, req *pb.Request, rep *pb.Response) error {
    rep.Name = req.Name
    rep.Msg = req.Name + "您好"
    return nil
}
func main() {
    // 创建服务
    s := micro.NewService(
        // micro.Name("服务名")
        micro.Name("hello"),
    )
    // 初始化
    s.Init()
    // 注册
    pb.RegisterGreeterHandler(s.Server(), &server{})
    err := s.Run()
    if err != nil {
        fmt.Println(err)
    }
}

 

// PS: 这里遇到一个问题就是本地下载包后无法正常启动编译服务 使用go mod 正常

 

终端调用

1
2
3
4
5
$ micro call hello Greeter.Greet '{"name":"SngZhibin","msg":"null"}'
{
        "name": "SngZhibin",
        "msg": "SngZhibin您好"
}

 

代码调用 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package main
 
import (
    "Songzhibin/raftRealize/microDemo/pb"
    "context"
    "fmt"
    "github.com/micro/go-micro"
)
 
func main() {
    s := micro.NewService(
        // micro.Name("服务名")
        micro.Name("hello"),
    )
    greeter := pb.NewGreeterClient("hello", s.Client())
    rep, err := greeter.Greet(context.TODO(), &pb.Request{
        Name: "Songzhibin",
        Msg:  "null",
    }, )
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("%#v",rep)
}

  

http Api调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 先开启api
$  micro api --handler=rpc
// 在启动服务
// PS:服务名有要求 go.micro.api.xxx
2020-03-01 11:24:41.173184 I | Transport [http] Listening on [::]:54896
2020-03-01 11:24:41.173269 I | Broker [http] Connected to [::]:54897
2020-03-01 11:24:41.173562 I | Registry [mdns] Registering node: go.micro.api.hello-7269ef09-b1bd-40eb-b6e2-627023af0009
// 有 connect to 即可判断连接成功
// 在postman 调用
http://localhost:8080/hello/Greeter/Greet -> post
// hello 服务名 Greeter 注册服务  Greet调用方法
body:
{
 "name":"Songzhibin",
 "msg":"Null"
}
 
res:
{
    "name": "Songzhibin",
    "msg": "Songzhibin您好"
}

  

更多使用访问中文文档

 

posted @   Binb  阅读(403)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示