go-micro实战一个http服务调用一个grpc服务

本文介绍了如何使用 Go-Micro 构建一个HTTP服务来调用GRPC服务。首先,详细讲解了etcd的启动过程,接着展示了如何启动一个GRPC服务,包括编写protobuf文件、编译及实现服务接口。然后,通过Micro工具管理etcd并调用服务。最后,阐述了如何在Go-Micro中集成 Gin 框架创建HTTP服务,实现HTTP到GRPC的调用,包括协议定义、熔断器的使用,并给出了调用示例。
摘要由CSDN通过智能技术生成

官方文档: 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.com/google/protobuf/releases/tag/v3.4.1 下找到win32包 解压并配置环境变量

安装 gen-proto-go
go get -u github.com/golang/protobuf/protoc-gen-go

安装micro protobuf 插件
go get github.com/micro/protobuf/proto github.com/micro/protobuf/protoc-gen-go

proto生成文件
protoc -I . --go_out=plugins=micro:. greeter.proto

安装protco-go-inject-tag插件,用来作pb注解
go get github.com/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.com/micro/go-micro"
    "github.com/micro/go-micro/registry"
    "github.com/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()
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值