https://github.com/grpc-ecosystem/grpc-gateway

在grpc之上加一层代理并转发,转变成protobuf格式来访问grpc服务

安装

  1. go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
  2. go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
  3. go get -u github.com/golang/protobuf/protoc-gen-go

Prod.proto

  1. syntax="proto3";
  2. package services;
  3. import "google/api/annotations.proto";
  4.  
  5. message ProdRequest {
  6. int32 prod_id =; //传入的商品ID
  7. }
  8. message ProdResponse{
  9. int32 prod_stock=;//商品库存
  10. }
  11.  
  12. service ProdService {
  13. rpc GetProdStock (ProdRequest) returns (ProdResponse){
  14. option (google.api.http) = {
  15. get: "/v1/prod/{prod_id}"
  16. };
  17.  
  18. }
  19. }

生成两个文件

首先cd 进入pbfiles

  1. 这会生成Prod.pb.go
  2. protoc --go_out=plugins=grpc:../services Prod.proto
  3.  
  4. 这会生成Prod.pb.gw.go
  5. protoc --grpc-gateway_out=logtostderr=true:../services Prod.proto

httpserver.go

  1. package main
  2.  
  3. import (
  4. "context"
  5. "github.com/grpc-ecosystem/grpc-gateway/runtime"
  6. "google.golang.org/grpc"
  7. "grpcpro/services"
  8. "log"
  9. "net/http"
  10. )
  11.  
  12. func main() {
  13. gwmux:=runtime.NewServeMux()
  14. opt := []grpc.DialOption{grpc.WithInsecure()}
  15. err:=services.RegisterProdServiceHandlerFromEndpoint(context.Background(),
  16. gwmux,"localhost:8081",opt)
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. httpServer:=&http.Server{
  21. Addr:":8080",
  22. Handler:gwmux,
  23. }
  24. httpServer.ListenAndServe()
  25.  
  26. }

server.go

  1. package main
  2.  
  3. import (
  4. "google.golang.org/grpc"
  5. "grpcpro/services"
  6. "net"
  7. )
  8.  
  9. func main() {
  10. rpcServer:=grpc.NewServer()
  11. services.RegisterProdServiceServer(rpcServer,new(services.ProdService))
  12.  
  13. lis,_:=net.Listen("tcp",":8081")
  14.  
  15. rpcServer.Serve(lis)
  16.  
  17. }

源码地址:

https://github.com/sunlongv520/grpc-learn

https://github.com/sunlongv520/grpc-doc

使用gRPC-Gateway快速构建微服务-双向认证下rpc-gateway使用(同时提供rpc和http接口)的更多相关文章

  1. 通过GeneXus如何快速构建微服务架构

    概览 “微服务”是一个非常广泛的话题,在过去几年里,市面上存在着各种不同的定义. 虽然对这种架构方式没有一个非常精确的定义,但仍然有一些概念具有代表性. 微服务有着许多围绕业务能力.自动化部署.终端智 ...

  2. SpringBoot 快速构建微服务体系 知识点总结

    可以通过http://start.spring.io/构建一个SpringBoot的脚手架项目 一.微服务 1.SpringBoot是一个可使用Java构建微服务的微框架. 2.微服务就是要倡导大家尽 ...

  3. Springboot揭秘-快速构建微服务体系-王福强-2016年5月第一次印刷

    JavaConfig项目: spring IOC有一个非常核心的概念——Bean.由Spring容器来负责对Bean的实例化,装配和管理.XML是用来描述Bean最为流行的配置方式.Spring可以从 ...

  4. SpringBoot揭秘:快速构建微服务体系

    chapter 2: 饮水思源:回顾与探索Spring框架本质 IoC其实有两种方式,一种是DI(dependency Injection),一种是DL(dependency Lookup 依赖查找, ...

  5. 《SpringBoot揭秘 快速构建微服务体系》读后感(一)

    SpringIOC IOC有两种方式:一种是DI,另一种是DL,即Dependency Lookup(依赖查找).前者是当前软件实体被动接受其依赖的其他组件被IoC容器注入,而后者则是当前软件实体主动 ...

  6. 《SpringBoot揭秘 快速构建微服务体系》读后感(五)

    应用日志和spring-boot-starter-logging 快速web应用开发与spring-boot-starter-web 1.项目结构层面的约定

  7. 《SpringBoot揭秘 快速构建微服务体系》读后感(四)

    再谈自动配置 基于条件的自动配置 调整自动配置的顺序

  8. 《SpringBoot揭秘 快速构建微服务体系》读后感(三)

    SpringApplication:SpringBoot程序启动的一站式解决方案 深入探索SpringApplication执行流程 因为书上的版本是1.2的,比较老,这里参考http://blog. ...

  9. 《SpringBoot揭秘 快速构建微服务体系》读后感(二)

    最简单的springBoot应用 package com.louis.test; import org.springframework.boot.SpringApplication; import o ...

随机推荐

  1. getResourceAsStream的几种路径配置(properties文件的路径问题)

    文章目录 getResourceAsStream有以下几种: getResourceAsStream有以下几种: Class.getResourceAsStream(String path) : pa ...

  2. wpf 几种常用控件样式

    转自:http://blog.csdn.net/xuejiren/article/details/39449515

  3. Activiti业务键(businessKey)

    问题:如何让业务对象和对应的流程 关联? 发现ProcessInstance 有个方法getBusinessKey()可以得到一个businessKey. ProcessInstance 对应数据库中 ...

  4. Linux vi和vim编辑器(1)

    1:vi和vim的三种常见模式  1.1正常模式 在正常模式下,我们可以使用快捷键: 以vim打开一个档案就直接进入一般模式了(这是默认的模式).在这个模式中,你可以使用[上下左右」按键来移动光标,你 ...

  5. MapReduce各个执行阶段

  6. thinkone无法重新创建数据库的问题 newsy

    错误描述: 无法加载数据库驱动: Think\Db\Driver\    前后装了OneThink1.0和OneThink1.1都没成功,都是卡在了安装页面的三个step,读者们你们也遇到一样的情况吗 ...

  7. MQTT入门介绍

    一简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级&q ...

  8. Widget Factory

    Widget Factory 有N种零件,生产所需天数都为3~9天,有M条记录,记录开工星期几,和停工星期几,并告诉你这条记录所加工的零件,求每种零件的生产时间,\(1≤N,M≤300\). 解 显然 ...

  9. Jmeter性能测试 入门【转】

    Jmeter性能测试 入门[转] Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmeter ...

  10. leetcode-第五场双周赛-1134-阿姆斯特朗数

    第一次提交: class Solution: def isArmstrong(self, N: int) -> bool: n = N l = len(str(N)) res = 0 while ...