首页 > 其他分享 >go-zero开发入门之API网关开发

go-zero开发入门之API网关开发

时间:2023-12-08 10:24:59浏览次数:43  
标签:网关 grpc zero add API go gateway

开发一个 API 网关,代理 https://www.cnblogs.com/aquester/p/17882070.html 中的 RPC 服务。

网关完整源代码

// file: main.go
package main

import (
    "flag"
    "fmt"

    "github.com/zeromicro/go-zero/core/conf"
    "github.com/zeromicro/go-zero/gateway"
)

var configFile = flag.String("f", "etc/gateway.yaml", "the config file")

func main() {
    var c gateway.GatewayConf
    flag.Parse()
    
    conf.MustLoad(*configFile, &c)
    server := gateway.MustNewServer(c)
    defer server.Stop()

    fmt.Printf("Starting gateway on %s:%d...\n", c.Host, c.Port)
    server.Start()
}

上述代码可以使用 go-zero 的脚手架工具 goctl 自动生成,比如:

goctl gateway -dir gateway

同时会生成网关配置文件 gateway.yaml:

# cat etc/gateway.yaml 
Name: gateway-example # gateway name
Host: localhost # gateway host
Port: 8888 # gateway port
Upstreams: # upstreams
  - Grpc: # grpc upstream
      Target: 0.0.0.0:8080 # grpc target,the direct grpc server address,for only one node
#      Endpoints: [0.0.0.0:8080,192.168.120.1:8080] # grpc endpoints, the grpc server address list, for multiple nodes
#      Etcd: # etcd config, if you want to use etcd to discover the grpc server address
#        Hosts: [127.0.0.1:2378,127.0.0.1:2379] # etcd hosts
#        Key: greet.grpc # the discovery key
    # protoset mode
    ProtoSets:
      - hello.pb
    # Mappings can also be written in proto options
#    Mappings: # routes mapping
#      - Method: get
#        Path: /ping
#        RpcPath: hello.Hello/Ping

编译网关源码生成可执行程序文件

# cat Makefile 
all: gateway
gateway: main.go
        go build -o gateway main.go 

clean:
        rm -f gateway

生成被代理 RPC 服务的 pb 文件

protoc --descriptor_set_out=add.pb add.proto

add.pb 是一个二进制文件。

编辑网关配置文件 gateway.yaml

# cat etc/gateway.yaml 
Name: go-zero-gateway # 网关名
Host: 0.0.0.0 # 网关的服务地址
Port: 8888 # 网关的服务端口
Upstreams: # 被网关代理的上游服务
  - Grpc: # gRPC 服务列表
      Etcd:
        Hosts:
        - 127.0.0.1:2379 # etcd 服务地址和端口(Endpoints)
        Key: add.rpc
    ProtoSets: # 这里为被代理 RPC 服务的 pb 文件列表
        - /root/go-zero/gateway/proto/add.pb
    Mappings: # Mappings can also be written in proto options
      - Method: get # HTTP 方法
        Path: /add # HTTP 路径
        RpcPath: add.Adder/add # 对应的 RPC 路径(第一个 add 为包名,Adder 为 service 名,后一个 add 为 service 中的方法名)

启动网关

./gateway

通过网关访问 RPC 服务

# curl -i '127.0.0.1:8888/add'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-a53f71dd9eb638c5c2af03eb633a56be-dad8426820c63b1d-00
Date: Fri, 08 Dec 2023 02:08:39 GMT
Content-Length: 9

{"sum":0}

# curl -i '127.0.0.1:8888/add?a=1&b=2'
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Traceparent: 00-0df2bbd651938b704c532a01bb2f16e3-27c5267777c8cc06-00
Date: Fri, 08 Dec 2023 02:08:47 GMT
Content-Length: 9

{"sum":3}

标签:网关,grpc,zero,add,API,go,gateway
From: https://www.cnblogs.com/aquester/p/17884580.html

相关文章

  • 前端学习-JavaScript学习-js基础-API02
    学习视频:黑马程序员视频链接事件监听三要素:事件源、事件类型、事件处理程序随机点名案例<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"&......
  • 如何配置Modbus转Profinet网关以与6台232 Modbus伺服通信
    如何配置Modbus转Profinet网关以与6台232Modbus伺服通信Modbus转Profinet网关(XD-MDPN100)连接6台232Modbus伺服同时控制的解决方案不仅简化了设备连接,还减少了人力投入和维护成本。通过Modbus转Profinet网关,操作人员只需对Profinet网关进行设置和监控,即可实现对6台232Modbus伺......
  • CodeForces 1901F Landscaping
    洛谷传送门CF传送门还是很有趣的一道题。场上直接暴拆式子,要维护动态凸包,本来以为是\(\log^2\)的,写着写着发现是\(\log^3\),遂弃。显然梯形面积最小等价于\(y_0+y_1\)最小,而\(y_0+y_1\)最小等价于梯形在\(m=\frac{n}{2}\)处最小。把上凸包建出来,发现过\(x=m......
  • 支持生成接口文档!Apipost IDEA插件使用体验
    前言Idea是一款功能强大的集成开发环境(IDE),它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea还具有许多插件和扩展,可以根据开发人员的需要进行定制和扩展,从而提高开发效率,今天我们就来介绍一款国产的API调试插件:Apipost-Helper什么是Apipost-Helper?Apipost-He......
  • go-zero 的 etcd 配置
    实现代码在core/discov/config.go文件中:typeEtcdConfstruct{ Hosts[]string Keystring IDint64`json:",optional"` Userstring`json:",optional"` Passstring`jso......
  • 如何获取家常菜谱的API接口
     随着人们对健康和美食的追求,越来越多的人开始自己在家烹饪,而获取家常菜谱是一个必不可少的环节。然而,我们并不总是能轻松找到适合自己口味的菜谱。而今日我们要介绍的数据源API接口,就是为了解决这个问题而诞生的。这个数据源API接口提供了各种不同场合、季节、年龄段、菜系等......
  • Modbus转Profinet网关连接EthernetIP协议的PLC和Modbus协议的仪表
    本案例是客户现场有多个气体探测仪,但是无法直接接入罗克韦尔系统中,因为气体探测仪是标准的ModbusRTU协议,需要配置的数据要通过Modbus转EtherNET/IP网关来实现和PLC的Ethernet网络进行通讯。使用设备为PLC、Modbus转EtherNET/IP网关、Modbus从站为气体探测仪。 项目中通讯配置方......
  • go-zero 开发入门-加法客服端示例
    定义RPC接口文件接口文件add.proto的内容如下:syntax="proto3";packageadd;optiongo_package="./add";messageAddReq{int32a=1;int32b=2;}messageAddResp{int32sum=1;}serviceAdder{rpcadd(AddReq)returns(A......
  • 构建一个语音转文字的WebApi服务
    构建一个语音转文字的WebApi服务简介由于业务需要,我们需要提供一个语音输入功能,以便更方便用户的使用,所以我们需要提供语音转文本的功能,下面我们将讲解使用Whisper将语音转换文本,并且封装成WebApi提供web服务给前端调用。创建项目第一步打开Vscode,选择一个目录作为工作空间,然......
  • JavaSe(11) - 常用API(上)
    JavaSe(11)-常用API(上)P155Math基本数学计算的工具类,包含执行基本数学运算的方法,例如指数,对数,平方根,三角函数...方法名说明publicstaticintabs(inta)获取绝对值ceil(doublea)向上取整floor(doublea)向下取整round(floata)四舍五入......