go-zero开发入门-API网关开发示例
开发一个 API 网关,代理 https://blog.csdn.net/Aquester/article/details/134856271 中的 RPC 服务。
网关完整源代码
// file: main.go
package mainimport ("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.GatewayConfflag.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 upstreamTarget: 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 modeProtoSets:- 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.gogo 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.rpcProtoSets: # 这里为被代理 RPC 服务的 pb 文件列表- /root/go-zero/gateway/proto/add.pbMappings: # 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}
相关文章:
go-zero开发入门-API网关开发示例
开发一个 API 网关,代理 https://blog.csdn.net/Aquester/article/details/134856271 中的 RPC 服务。 网关完整源代码 // file: main.go package mainimport ("flag""fmt""github.com/zeromicro/go-zero/core/conf""github.c…...
TCP一对一通信
package 二十一章; import java.io.*; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner;/*** Socket服务端**/ public class SocketServer {public static void main(String[] args) {ServerSocket ss null;Socket s null;try {// 创建监听…...
laravel DB::connection 报错 Database connection [{$name}] not configured
DB::connection(mysql2);//不是连接数据库名...
快捷支付是什么?快捷支付好申请吗?
快捷支付是指用户在购买商品时,不需要打开网上银行,只需提供银行卡号码、户名、手机号码等信息,银行验证手机号码的正确性,输入动态密码即可完成支付,无需打开网上银行。持卡人将银行卡绑定到第三方支付应用程序&#…...
如何在Spring Boot中集成RabbitMQ
如何在Spring Boot中集成RabbitMQ 在现代微服务架构中,消息队列(如RabbitMQ)扮演了关键的角色,它不仅能够提供高效的消息传递机制,还能解耦服务间的通信。本文将介绍如何在Spring Boot项目中集成RabbitMQ,…...
【Spring Boot 源码学习】ApplicationContextInitializer 详解
Spring Boot 源码学习系列 ApplicationContextInitializer 详解 引言往期内容主要内容1. 初识 ApplicationContextInitializer2. 加载 ApplicationContextInitializer3. ApplicationContextInitializer 的初始化 总结 引言 书接前文《初识 SpringApplication》,我们…...
软考2018下午第六题改编逻辑(状态模式)
在状态模式中,我们创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象 package org.example.状态模式.软考航空;/*** author lst* date 2023年12月07日 15:37*/ class FrequentFlyer {CState state;double flyMiles;public FrequentFlyer() {…...
基于深度学习的典型目标跟踪算法
目标跟踪是计算机视觉领域中一个重要的任务,它涉及在视频序列中持续地定位和追踪目标对象。以下是一些常见的深度学习目标跟踪算法: Siamese Network: Siamese网络是一种孪生网络结构,它通过将目标图像与周围环境进行对比,学习目…...
docker搭建nginx实现负载均衡
docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口:8075映射80 docker…...
Android蓝牙协议栈fluoride(二) - 软件框架
概述 fluoride 协议栈在整个软件框架中作为一个中间件的角色,向上对接APP,向下对接蓝牙芯片。fluoride采用C语言实现,与APP(Jave)通信采用JNI机制;与蓝牙芯片通信使用HCI硬件接口(HCI软件协议参考蓝牙核心规范&#x…...
IDEA中的Postman!
Postman是大家最常用的API调试工具,那么有没有一种方法可以不用手动写入接口到Postman,即可进行接口调试操作?今天给大家推荐一款IDEA插件:Apipost Helper,写完代码就可以调试接口并一键生成接口文档!而且还…...
el-tooltip (element-plus)修改长度
初始状态: 修改后: 就是添加 :teleported"false",问题解决!!! <el-tooltipeffect"dark"content"要求密码长度为9-30位,需包含大小写字母、数字两种或以上与特殊字…...
Verilog学习 | 用initial语句写出固定的波形
initial beginia 0;ib 1;clk 0;#10ia 1; #20ib 0;#20ia 0; endalways #5 clk ~clk; 或者 initial clk 0;initial beginia 0;#10ia 1; #40ia 0; endinitial beginib 1;#30 ib 0; endalways #5 clk ~clk;...
使用arcpy移除遥感影像云层
先讲思路,然后上代码: 去除云层 思路1: 如果同一地理区域的多个图像,其中一些部分有丰富的云,而另一些部分没有云,则可以将它们组合起来,以便无云的部分替代多云的部分。这种方法很简单&…...
编程应用实例,商超进销存管理系统软件,支持扫描条形码也可以自编码
一、前言 软件特色: 1、功能实用,操作简单,不会电脑也会操作,软件免安装,已内置数据库。软件在关闭的时候,可以设置会员数据备份到U盘,数据本机备份一份,U盘备份一份,双…...
第二证券:十字星买入法?
首要,让我们了解一下什么是十字星。十字星是指股票图表上出现的一种形状,它位于较长的蜡烛线的中心,上下为两个小蜡烛线。这种形状通常被解释为股票价格或许会反转的信号,由于它表明晰股价在一段时间内处于相对稳定的水平。当股价…...
【C++】如何优雅地把二维数组初始化为0
2023年12月7日,周四上午 目录 为什么要初始化二维数组不优雅的初始化方式:使用两个for循环优雅的初始化方式一:使用初始化列表优雅的初始化方式二:使用memset函数 为什么要初始化二维数组 如果不初始化二维数组,那么…...
8 个顶级的 PDF 转 Word 转换器
PDF 是跨不同平台分发信息而不影响内容格式的好方法。但这种安全级别确实有其缺点。没有直接的方法来编辑 PDF 上的文本或内容。编辑 PDF 文档的唯一方法是将其转换为 Word 文档或其他可以编辑的文件类型。将 PDF 转换为 Word 是根据需要编辑 PDF 内容的最快方法。有许多免费的…...
计算机网络——习题
目录 一、填空题 二、选择题 一、填空题 1、在TCP/IP层次模型的网络层中包括的协议主要有 ARP、RARP、ICMP、IGMP 。 2、传输层的传输服务有两大类: 面向连接(TCP)和 无连接服务(UDP)。 3、Internet所提供的三项…...
Linux 线程——信号量
题目:编写代码实现编写一个程序,开启三个线程,这三个线程的ID分别是A,B,C,每个线程将自己的ID在屏幕上打印10遍,要求输出必须按照ABC的顺序显示,如:ABCABCABC... 思路:创建三个ID分别为ABC的线程…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
动态 Web 开发技术入门篇
一、HTTP 协议核心 1.1 HTTP 基础 协议全称 :HyperText Transfer Protocol(超文本传输协议) 默认端口 :HTTP 使用 80 端口,HTTPS 使用 443 端口。 请求方法 : GET :用于获取资源,…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
