gRPC: 通过 Web 获取服务原信息-阿里云开发者社区

开发者社区> 尹东勋> 正文

gRPC: 通过 Web 获取服务原信息

简介: 本文将介绍如何在 gRPC 微服务中嵌入 Web UI 获取服务原信息。
+关注继续查看

介绍

本文将介绍如何在 gRPC 微服务中嵌入 Web UI 获取服务原信息

名称详情
README如果本地有 README.md 文件,会展示
进程信息显示进程信息
API 列表获取 API 列表
gRPC 错误信息gRPC 对应 grpc-gateway 错误信息
Entry 列表Entry 列表,请参考详情
Config 列表列出 Config 文件信息
CA 证书列出 TLS/SSL 证书信息
依赖列出 go.mod 信息
LICENSE如果本地有 LICENSE 文件,会展示
OS 信息当前 OS 信息
Go Env 信息Go 环境信息
Git 信息如果是 Git 工程,会展示
Log 信息展示 Log 原信息
Metrics展示 Prometheus Metrics

我们将会使用 rk-boot 来启动 gRPC 服务。

请访问如下地址获取完整教程:

安装

go get github.com/rookie-ninja/rk-boot

快速开始

为了完整展示,我们使用一个 git 工程,并且添加 API。

完整工程下载:Github

1.创建 protobuf 相关文件

我们使用 buf 命令行来编译 protobuf,需要创建如下几个文件。

文件名描述
api/v1/greeter.protoprotobuf 文件
api/v1/gw_mapping.yamlgRPC 对应 Restful API
buf.yaml告诉 buf 命令行在哪里寻找 protobuf 文件
buf.gen.yaml告诉 buf 命令行如何编译 protobuf 文件
  • api/v1/greeter.proto
syntax = "proto3";

package api.v1;

option go_package = "api/v1/greeter";

service Greeter {
  rpc Greeter (GreeterRequest) returns (GreeterResponse) {}
}

message GreeterRequest {
  string name = 1;
}

message GreeterResponse {
  string message = 1;
}
  • api/v1/gw_mapping.yaml
type: google.api.Service
config_version: 3

# Please refer google.api.Http in https://github.com/googleapis/googleapis/blob/master/google/api/http.proto file for details.
http:
  rules:
    - selector: api.v1.Greeter.Greeter
      get: /api/v1/greeter
  • buf.yaml
version: v1beta1
name: github.com/rk-dev/rk-demo
build:
  roots:
    - api
  • buf.gen.yaml
version: v1beta1
plugins:
  # protoc-gen-go needs to be installed, generate go files based on proto files
  - name: go
    out: api/gen
    opt:
     - paths=source_relative
  # protoc-gen-go-grpc needs to be installed, generate grpc go files based on proto files
  - name: go-grpc
    out: api/gen
    opt:
      - paths=source_relative
      - require_unimplemented_servers=false
  # protoc-gen-grpc-gateway needs to be installed, generate grpc-gateway go files based on proto files
  - name: grpc-gateway
    out: api/gen
    opt:
      - paths=source_relative
      - grpc_api_configuration=api/v1/gw_mapping.yaml
  # protoc-gen-openapiv2 needs to be installed, generate swagger config files based on proto files
  - name: openapiv2
    out: api/gen
    opt:
      - grpc_api_configuration=api/v1/gw_mapping.yaml
  • 编译 protobuf 文件
$ buf generate

2.创建 boot.yaml

除了开启 grpc.tv.enabled,我们还开启了其他服务,这样就可以验证完整 TV 页面。

请参考专栏里其他系列文章来获取每个选项的详细信息。或者访问:rk-boot 官方文档。

---
grpc:
  - name: greeter                   # Required, Name of grpc entry
    port: 8080                      # Required, Port of grpc entry
    enabled: true                   # Required, Enable grpc entry
    commonService:
      enabled: true                 # Optional, Enable common service, default: false
    gwMappingFilePaths:
      - "api/v1/gw_mapping.yaml"    # Boot will look for gateway mapping files and load information into memory
    prom:
      enabled: true                 # Enable prometheus client
    sw:
      enabled: true                 # Optional, Enable swagger, default: false
      jsonPath: "api/gen/v1"        # Optional, The directory where swagger json file located, default: ""
    tv:
      enabled: true                 # Optional, Enable Rk TV, default: false
    interceptors:
      metricsProm:
        enabled: true

3.创建 main.go

// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.

package main

import (
    "context"
    "fmt"
    "github.com/rookie-ninja/rk-boot"
    "google.golang.org/grpc"
    "rookie-ninja/demo/api/gen/v1"
)

// Application entrance.
func main() {
    // Create a new boot instance.
    boot := rkboot.NewBoot()

    // Get grpc entry with name
    grpcEntry := boot.GetGrpcEntry("greeter")
    // Register grpc server into GrpcEntry
    grpcEntry.AddRegFuncGrpc(registerGreeter)
    // Register grpc gateway into GrpcEntry
    grpcEntry.AddRegFuncGw(greeter.RegisterGreeterHandlerFromEndpoint)

    // Bootstrap
    boot.Bootstrap(context.Background())

    // Wait for shutdown sig
    boot.WaitForShutdownSig(context.Background())
}

func registerGreeter(server *grpc.Server) {
    greeter.RegisterGreeterServer(server, &GreeterServer{})
}

// GreeterServer Implementation of greeter.UnimplementedGreeterServer
type GreeterServer struct{}

// Greeter Handles Greeter request
func (server *GreeterServer) Greeter(ctx context.Context, request *greeter.GreeterRequest) (*greeter.GreeterResponse, error) {
    return &greeter.GreeterResponse{
        Message: fmt.Sprintf("Hello %s!", request.Name),
    }, nil
}

4.文件夹结构

.
├── LICENSE
├── README.md
├── api
│   ├── gen
│   │   └── v1
│   │       ├── greeter.pb.go
│   │       ├── greeter.pb.gw.go
│   │       ├── greeter.swagger.json
│   │       └── greeter_grpc.pb.go
│   └── v1
│       ├── greeter.proto
│       └── gw_mapping.yaml
├── boot.yaml
├── buf.gen.yaml
├── buf.yaml
├── go.mod
├── go.sum
└── main.go

5.验证

$ go run main.go

访问 localhost:8080/rk/v1/tv

5.1 README

rk-boot 会读取本地 README.md 文件,并展示在 TV 页面中。

如果是打包编译的情况,rk-boot 会寻找 .rk/README.md 路径,可以通过 RK 命令行,方便编译。
请参考:例子

5.2 进程原信息

rk-boot 会读取本地进程信息。

5.3 API 列表

rk-boot 会读取 gRPC 内部所有 API 列表。只有在下面的配置加入到了 boot.yaml 里面时,才会显示 grpc-gateway 的对应 Pattern。

gwMappingFilePaths:
  - "api/v1/gw_mapping.yaml"

5.4 错误映射

5.5 Entry 列表

5.6 Config 列表

如果 boot.yaml 里有 config 入口,会显示在这里。

下面的图只是个例子截图,上面的代码不会有 Config,因为我们没有加入 Config。

5.7 证书

如果 boot.yaml 里有 cert 入口,会显示在这里。

下面的图只是个例子截图,上面的代码不会有 Cert,因为我们没有加入 Cert。

5.8 依赖

rk-boot 会读取本地 go.mod 文件,并展示在 TV 页面中。

如果是打包编译的情况,rk-boot 会寻找 .rk/go.mod 路径,可以通过 RK 命令行,方便编译。
请参考:例子

5.9 OS 信息

rk-boot 会收集本地 OS 信息。

5.10 Go Env 信息

rk-boot 会收集本地 Go Env 信息。

5.11 Git 信息

rk-boot 会读取本地 .git 文件,并展示在 TV 页面中。

如果是打包编译的情况,rk-boot 会寻找 .rk/rk.yaml 路径,里面包含了 git 信息。可以通过 RK 命令行,方便编译。
请参考:例子

5.12 Log 信息

rk-boot 会显示目前在进程中的所有 Log 实例信息。

5.13 Prometheus Metrics

rk-boot 如果开启了 Prometheus 中间件,我们可以在这个页面中看到 API 的基本监控信息。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
asp.net 获取服务器相关信息
?#region?返回操作系统信息?.net版本?数据库大小??程序大小等方法????????///?????????///?获取服务器系统信息????????///?????????public?string?GetOSVersion()????????{????????????OperatingSystem?os?=?Environment.
603 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的,?mysql的 3306,?mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建. ? have?fun! ?将编程看作是一门艺术,而不单单是个技术。
4397 0
JAVA与.NET“.NET技术”的相互调用——通过Web服务实现相互调用
  JAVA与.NET是现今世界竞争激烈的两大开发媒体,两者语言有很多相似的地方。而在很多大型的开发项目里面,往往需要使用两种语言进行集成开发。而很多的开发人员都会偏向于其中一种语言,在使用集成开发的时候对另一种语言感觉到畏惧。
714 0
nginx做反向负载均衡,后端服务器获取真实客户端ip(转)
首先,在前端nginx上需要做如下配置: location / proxy_set_hearder host ? ? ? ? ? ? ? ?$host; proxy_set_header X-forwarded-for $proxy_add_x_forwarded_for; prox...
1383 0
c# webBrowser 获取Ajax信息 .
原文:c# webBrowser 获取Ajax信息 . c#中 webbrowser控件对Ajax的执行,没有任何的响应,难于判断Ajax是否已经执行完毕,我GG了一下午,找到一个方法,介绍一下: 假如在页面中有个是通过Ajax来改变值,当webBrowser1.
660 0
WEB应用中的信息泄漏以及攻击方法
本文讲的是WEB应用中的信息泄漏以及攻击方法,下面内容介绍了在web应用程序中的一些信息泄漏问题,当然也会举例分析,介绍如何发现这些信息泄漏。
2039 0
+关注
尹东勋
点目科技创始人
60
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载
http://www.vxiaotou.com