Kong[nginx]-21 配置Kong的grpc代理功能


KONG专题目录


0x00 前言

本文内容包括:

  • 用go语言实现一个grpc的hello服务
  • 通过kong为grpc服务添加一个接口配置项
  • 命令行方式测试grpc接口服务

注意: 本文只记录了Kong相关的配置, Go相关内容没有过多详细介绍, 见谅.

0x01 Kong升级安装

nginx 1.3.10 以后版本官方支持grpc协议, 所以, 本文开始要使用的Kong版本为 1.3.0.
由于之前教程里一直使用的是1.2.x 版本, 这里记录一下升级过程.

# 查询可用版本
yum provides kong
# 安装 1.3.0 版本
yum install kong-1.3.0-1.x86_64

接下来, 第一次使用 kong restart 重启服务时, 会提示一些数据库格式不兼容的信息.
但只需要根据提示输入迁移数据库的指令即可完成.(具体指令忘记了记录 :)

再次 kong restart 完成升级

0x02 grpc 服务

go语言写grpc还是比较简单的(相比Java代码少了很多). 这里只记录一下用到的代码 ,具体实施过程 不是本文重点.

  • 定义一个proto
syntax = "proto3";

message HelloRequest {
    string greeting = 1;
}

message HelloResponse {
    string reply = 1;
}

service HelloService {
    rpc SayHello (HelloRequest) returns (HelloResponse) {
    }
}
  • 生成go代码
protoc --go_out=plugins=grpc:.  protos/order.proto
  • 编写服务端代码
package main

import (
    "fmt"
    "log"
    "net"

    "golang.org/x/net/context"
    "google.golang.org/grpc"
    "google.golang.org/grpc/reflection"
    order "grpc_demo/protos"
)

type Server struct{}

// SayHello (HelloRequest) returns (HelloResponse)
func (s *Server) SayHello(ctx context.Context, in *order.HelloRequest) (*order.HelloResponse, error) {
    return &order.HelloResponse{Reply: "Hello :" + in.Greeting}, nil
}

func main() {
    listener, e := net.Listen("tcp", ":50000")
    if e != nil {
        log.Fatalf("failed to listen : %v", e)
    }
    s := grpc.NewServer()
    order.RegisterHelloServiceServer(s, &Server{})

    reflection.Register(s)
    if e := s.Serve(listener); e != nil {
        log.Fatalf("failed to serve : %v", e)
    }

    fmt.Println("Server started ...")
}
  • 启动服务
go run server.go
Kong[nginx]-21 配置Kong的grpc代理功能_第1张图片
目录结构

到此, 我们就有一个端口为50000的grpc服务.

0x03 配置Kong
  • 添加一个service

    Kong[nginx]-21 配置Kong的grpc代理功能_第2张图片
    Service

  • 为此service添加一个router

    Kong[nginx]-21 配置Kong的grpc代理功能_第3张图片
    Router

重点已经给出来了, 记得PathsProtocols这里输入好字符后, 要回车一下.


OK, Kong已经配置完成, 是不是很简单.

0x04 安装grpc命令行工具grpcurl
go get github.com/fullstorydev/grpcurl
go install github.com/fullstorydev/grpcurl/cmd/grpcurl
Kong[nginx]-21 配置Kong的grpc代理功能_第4张图片
grpcurl
  • grpcurl 使用基础
    下图展示的是通过 grpcurl来查看服务的细节
  • 查看有哪些服务
    grpcurl -plaintext localhost:80 list
  • 查看服务有哪些方法
    grpcurl -plaintext localhost:80 list HelloService
  • 查看方法定义
    grpcurl -plaintext localhost:80 describe HelloService.SayHello
  • 查看参数定义
    grpcurl -plaintext localhost:80 describe HelloRequest
  • 构建参数, 发启调用
    grpcurl -d '{"greeting":"国服最坑开发"}' -plaintext localhost:80 HelloService.SayHello

Kong[nginx]-21 配置Kong的grpc代理功能_第5张图片
grpcurl使用基础
0x05 验证接口
grpcurl -v -d '{"greeting":"world"}' -plaintext localhost:80 HelloService.SayHello
Kong[nginx]-21 配置Kong的grpc代理功能_第6张图片
请求过程

完美!!!


KONG专题目录


你可能感兴趣的:(Kong[nginx]-21 配置Kong的grpc代理功能)