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()
}

本文标签: 实战microgrpchttp