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您好" } |
Songzhibin
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)