admin管理员组文章数量:1565292
官方文档: https://micro.mu/docs/
1. etcd启动:
单机版etcd,直接下载etcd.exe点击启动就好,默认监听2379端口,环境变量设置set ETCDCTL_API 3, 这样etcdctl命令就使用v3和etcd server交互。
consul启动 :(go-micro目前版本已经不再支持consul)
consul.exe agent -server -bootstrap -ui -client 0.0.0.0 -bind 192.168.1.101 -data-dir=F:/consul_data
其中,-server 代表以服务端的方式启动;-boostrap 指定自己为leader,而不需要选举;-ui 启动一个内置web界面; -client指定客 户端可以访问的IP,设置为0.0.0.0表示可以任意访问,否则只是默认本机能访问。
如果用docker启动,则:
docker pull consul
docker run -d --name=cs -p 8500:8500 consul agent -server -boostrap -ui -client 0.0.0.1
如果启动正常,访问 http://localhost:8500 会跳转到consul管理页面。
2.go-micro启动一个grpc服务:
需要提前安装protoc工具用来编译pb文件,同时安装micro go插件:
安装protoc
https://github/google/protobuf/releases/tag/v3.4.1 下找到win32包 解压并配置环境变量
安装 gen-proto-go
go get -u github/golang/protobuf/protoc-gen-go
安装micro protobuf 插件
go get github/micro/protobuf/proto github/micro/protobuf/protoc-gen-go
proto生成文件
protoc -I . --go_out=plugins=micro:. greeter.proto
安装protco-go-inject-tag插件,用来作pb注解
go get github/favadi/protoc-go-inject-tag
编写pb文件:
syntax = "proto3";
package Service;
import "models.proto";
message ProdsReq {
// @inject_tag: json:"size", form:"size"
int32 size = 1;
// @inject_tag: uri:"pid"
int32 prod_id = 2;
}
message ProdListResp {
repeated ProdModel data = 1;
}
message ProdDetailtResp {
ProdModel data = 1;
}
service ProdService {
rpc GetProdsList(ProdsReq) returns (ProdListResp);
rpc GetProdsDetail(ProdsReq) returns (ProdDetailtResp);
}
编译pb:
protoc --micro_out=../ --go_out=../ models.proto
protoc --micro_out=../ --go_out=../ prodService.proto
protoc-go-inject-tag -input=../models.pb.go
protoc-go-inject-tag -input=../prodService.pb.go
编写项目工程:
package main
import (
"github/micro/go-micro"
"github/micro/go-micro/registry"
"github/micro/go-plugins/registry/etcd"
"go-micro-grpc/ServiceImpl"
Service "go-micro-grpc/Services"
)
func main() {
//consul作为注册中心
//consulReg := consul.NewRegistry(
// registry.Addrs("192.168.1.101:8500"),
// )
//etcd作为注册中心
etcdReg := etcd.NewRegistry(registry.Addrs("127.0.0.1:2379"))
svc := micro.NewService(
micro.Name("prodservice"), //可以通过这个名字调用到此服务
micro.Address(":8011"),
micro.Registry(etcdReg),
)
svc.Init()
//protoc --micro_out=../ --go_out=../ prodService.proto编译出的grpc服务接口
Service.RegisterProdServiceHandler(svc.Server(), new(ServiceImpl.ProdService))
svc.Run()
}
版权声明:本文标题:go-micro实战一个http服务调用一个grpc服务 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725584178a1031000.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论