Nginx配置(ngx_http_grpc_module)

Directives
     grpc_bind
     grpc_buffer_size
     grpc_connect_timeout
     grpc_hide_header
     grpc_ignore_headers
     grpc_intercept_errors
     grpc_next_upstream
     grpc_next_upstream_timeout
     grpc_next_upstream_tries
     grpc_pass
     grpc_pass_header
     grpc_read_timeout
     grpc_send_timeout
     grpc_set_header
     grpc_socket_keepalive
     grpc_ssl_certificate
     grpc_ssl_certificate_key
     grpc_ssl_ciphers
     grpc_ssl_conf_command
     grpc_ssl_crl
     grpc_ssl_name
     grpc_ssl_password_file
     grpc_ssl_protocols
     grpc_ssl_server_name
     grpc_ssl_session_reuse
     grpc_ssl_trusted_certificate
     grpc_ssl_verify
     grpc_ssl_verify_depth
服务端启动

string.proto:

syntax = "proto3";

package pb;

service StringService{
    rpc Concat(StringRequest) returns (StringResponse) {}
}

message StringRequest {
    string A = 1;
    string B = 2;
}

message StringResponse {
    string Ret = 1;
    string err = 2;
}

string.go:

package service

import (
    "context"
    "grpc-demo/pb"
)

type StringService struct {

}

func (s *StringService)Concat(ctx context.Context,req *pb.StringRequest)(*pb.StringResponse,error)  {
    response := pb.StringResponse{Ret:req.A + req.B}
    return &response,nil
}

main.go:

package main

import (
    "flag"
    "fmt"
    "google.golang.org/grpc"
    "grpc-demo/pb"
    "grpc-demo/service"
    "log"
    "net"
)

func main()  {

    port := flag.Int("port",1234,"端口")

    flag.Parse()

    lis,err := net.Listen("tcp",fmt.Sprintf(":%d",*port))
    if err != nil {
        log.Fatal("listen失败:",err)
    }

    grpcServer := grpc.NewServer()
    stringService := new(service.StringService)
    pb.RegisterStringServiceServer(grpcServer,stringService)
    grpcServer.Serve(lis)
}

交叉编译:

GOOS=linux go build -o grpc_service server.go

docker-composer.yaml:

go:
    build:
      context: ./go
    ports:
      - "1234:1234"
    networks:
      - web-network
    volumes:
      - "./go/apps/:/apps"
    command: ["/apps/grpc_service"]

Dockerfile:

From alpine:3.12

WORKDIR /apps

启动:

docker-compose up -d go
Nginx配置
server {
    listen 9200 http2;
    server_name ngrpc.com;
    access_log /var/log/nginx/ngrpc.com.access.log;
    location / {
        grpc_pass grpc://go:1234;
    }
}
测试
57-1.png

观察 access log:

172.18.0.1 - - [21/Mar/2022:18:01:24 +0800] "POST /pb.StringService/Concat HTTP/2.0" 200 17 "-" "grpc-node-js/1.4.2"

golang client 测试:

57-2.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 原文出处:gRPC gRPC分享 概述 gRPC 一开始由 google 开发,是一款语言中立、平台中立、开源的远...
    小波同学阅读 12,066评论 0 18
  • 简介 此项目是一个模拟公民身份信息链的区块链项目 github 地址: https://github.com/ak...
    CrazyWolf_46a9阅读 12,819评论 0 0
  • 1. 分布式系统核心问题 参考书籍:《区块链原理、设计与应用》 一致性问题例子:两个不同的电影院买同一种电影票,如...
    molscar阅读 4,451评论 0 0
  • https://learnku.com/docs/gin-gonic/2018/gin-readme/3819 安...
    程序员的自我修养阅读 5,036评论 0 1
  • 前言 Go,又称Golang,是谷歌在21世纪开发的一种新的编程语言,它静态强类型、从语言层面支持并发(Gorou...
    Purp1e阅读 12,040评论 1 1