1. grpc gateway 安装

参考,比较简单,有需要的依赖可以参考相资料

mkdir tmp
cd tmp
git clone https://github.com/google/protobuf
cd protobuf
./autogen.sh
./configure
make
make check
sudo make install go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
go get -u github.com/golang/protobuf/protoc-gen-go
资料
 
2. 简单项目
a. 项目结构

├── Dockerfile
├── Gopkg.lock
├── Gopkg.toml
├── README.md
├── docker-compose.yml
├── main.go
├── pb
│ └── echoservice.proto
├── rpcserver
│ ├── Dockerfile
│ ├── Gopkg.lock
│ ├── Gopkg.toml
│ ├── main.go
├── service
│ └── pb
│ ├── echoservice.pb.go
│ └── echoservice.pb.gw.go b. probu编写(pb/echoservice.proto) syntax="proto3";
package echoservice;
option go_package="echoservice";
import "google/api/annotations.proto";
service EchoService {
rpc Echo(EchoMessage) returns (EchoResponse) {
option (google.api.http) = {
post: "/v1/echo"
body: "*"
};
}
} message EchoMessage{
string message=1;
}
message EchoResponse{
string message=1;
} c. 生成gRPC stub以及gateway code protoc -I/usr/local/include -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--go_out=plugins=grpc:./service \
pb/echoservice.prot protoc -I/usr/local/include -I. \
-I$GOPATH/src \
-I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis \
--grpc-gateway_out=logtostderr=true:./service \
pb/echoservice.prot d. 实现grpc server rpcserver/main.go package main import "context"
import pb "github.com/rongfengliang/restyapp/service/pb"
import grpc "google.golang.org/grpc"
import "net"
import "log" type server struct{} func (s *server) Echo(ctx context.Context, in *pb.EchoMessage) (*pb.EchoResponse, error) {
return &pb.EchoResponse{
Message: in.Message,
}, nil
}
func main() {
lis, err := net.Listen("tcp", "0.0.0.0:9000")
if err != nil {
log.Fatal("some wrong")
}
s := grpc.NewServer()
pb.RegisterEchoServiceServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatal("some wrong")
}
} e. rpcserver dockerfile # build stage
FROM golang:1.9-alpine AS build-env
RUN apk --no-cache add build-base git bzr mercurial gcc
ENV D=/go/src/github.com/rongfengliang/restyapp
ADD . $D
RUN cd $D && go build -o rpcserver && cp rpcserver /tmp/ FROM alpine:latest
WORKDIR /app
EXPOSE 9000
COPY --from=build-env /tmp/rpcserver /app/rpcserver
CMD ["./rpcserver"] f. gateway code package main import (
"context"
"flag"
"net/http" "github.com/golang/glog"
"github.com/grpc-ecosystem/grpc-gateway/runtime"
gw "github.com/rongfengliang/restyapp/service/pb"
grpc "google.golang.org/grpc"
) var (
echoEndpoint = flag.String("echo_endpoint", "rpcserver:9000", "endpoint of YourService")
) func run2() error {
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel() mux := runtime.NewServeMux()
opts := []grpc.DialOption{grpc.WithInsecure()}
err := gw.RegisterEchoServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts)
if err != nil {
return err
} return http.ListenAndServe(":8089", mux)
}
func main() {
flag.Parse()
defer glog.Flush()
if err := run2(); err != nil {
glog.Fatal(err)
}
} g. gateway dockerfile # build stage
FROM golang:1.9-alpine AS build-env
RUN apk --no-cache add build-base git bzr mercurial gcc
ENV D=/go/src/github.com/rongfengliang/restyapp
ADD . $D
RUN cd $D && go build -o gwserver && cp gwserver /tmp/ FROM alpine:latest
WORKDIR /app
EXPOSE 8089
COPY --from=build-env /tmp/gwserver /app/gwserver
CMD ["./gwserver"] h. docker-compose file version: '3'
services:
rpcserver:
image: rpcserver
build:
context: ./rpcserver
gwserver:
image: gwserver
ports:
- 8089:8089
build:
context: .
depends_on:
- rpcserver 备注:构建使用了docker stage 依赖使用vendor 方式,简单依赖的处理
 
 
3. 运行
docker-compose build
docker-compose up -d 从构建的大小来看,还是比较小的,可以节省好多资源
节省
4. 测试
post http://localhost:8089/v1/echo
content-type:application/json
data: {"message":"demoinfo"}
 
5. 参考资料
https://github.com/grpc-ecosystem/grpc-gateway
https://github.com/rongfengliang/restyapp
 
 
 
 
 

grpc gateway 使用以及docker compose 集成的更多相关文章

  1. Docker Compose集成式应用组合及service编排

    Compose简介 Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排.其代码目前在 https://github.com/docker/compose 开源.C ...

  2. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  3. 使用Docker Compose搭建Service Mesh

    使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...

  4. 基于Docker Compose的.NET Core微服务持续发布

    是不是现在每个团队都需要上K8s才够潮流,不用K8s是不是就落伍了.今天,我就通过这篇文章来回答一下. 一.先给出我的看法和建议 我想说的是,对于很多的微小团队来说,可能都不是一定要上K8s,毕竟上K ...

  5. Sentry 监控 - 私有 Docker Compose 部署与故障排除详解

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  6. .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行

    本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...

  7. ASP.NET Core 如何在运行Docker容器时指定容器外部端口(docker compose)

    前面我写了一系列关于持续集成的文章,最终构建出来的镜像运行之后,应该会发现每次构建运行之后端口都变了,这对于我们来说是十分不方便的,所以我们可以通过修改docker compose的配置文件来完成我们 ...

  8. 附005.Docker Compose文件详解

    一 Docker Compose文件简介 compose文件使用yml格式,主要分为了四个区域: version:用于指定当前docker-compose.yml语法遵循哪个版本 services:服 ...

  9. 一文掌握Docker Compose

    目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1.基本文件及目录设置 2.创建一个Dockerfile 3.通过docker-comp ...

随机推荐

  1. JavaScript_正则表达式

    [规则]开头结尾    "^The":表示所有以"The"开始的字符串("There","The cat"等):    ...

  2. linux加域退域

    realm list realm leave od.com realm join -U Administrator od.com

  3. 最优比率生成树 poj2728

    Desert King Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 28407   Accepted: 7863 Desc ...

  4. UVA-10917 Walk Through the Forest (dijkstra+DP)

    题目大意:n个点,m条边的无向图.一个人从起点到终点按照下面的走法:从A走向B当A到终点的最小距离比B到终点的最小距离大时.问从起点到终点有多少路径方案. 题目分析:先用dijkstra预处理出终点到 ...

  5. iOS开发图片加载的内存问题及优化方案

    原创作者:Magic-Unique 原文地址:https://github.com/Magic-Unique/HXImage猿吧 - 资源共享论坛: http://www.coderbar.cn 做最 ...

  6. 尝试优化骨骼动画计算的意外收获——使用嵌入式汇编对float转int进行优化

    本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/4984530.html 公司引擎目前是使用CPU计算骨骼动画(采用了D3DX提供的函数 ...

  7. $.ajaxComplete()

    https://www.cnblogs.com/RachelChen/p/5433881.html 全局ajax事件   必须当页面上存在任何ajax请求的时候都将触发这些特定的全局ajax处理函数. ...

  8. DB2 设置最大连接数

    db2 connect to dbname user username using passwd db2 update db cfg using MAXAPPLS number 查看最大连接数 查看D ...

  9. Shell脚本编写规范

    shell脚本需要有较高的实用性.可维护.可阅读.方便他人阅读,因而需要建立一定的规范来操作 dream361@master:~$ cat test2.sh #!/bin/bash 所使用的bash程 ...

  10. 随机生成验证码及python中的事务

    1.随机生成验证码 # import random # print(random.random()) #-1的小数 # print(random.randint(,)) #包括1和3 # print( ...