go语言实现gateway简单样例

server/2024/9/18 12:53:11/ 标签: golang, gateway, 开发语言

目录

1、代码实现样例:

2、postman调用


1、代码实现样例:

gateway转发的url根据实际去调整,转发访问的url是否存在token,也根据实际情况去调整:

package mainimport ("fmt""io/ioutil""log""net/http""github.com/afex/hystrix-go/hystrix""github.com/gin-gonic/gin"
)func main() {r := gin.Default()// 设置路由r.GET("/service/:service", handleRequest)// 启动服务if err := r.Run(":8081"); err != nil {log.Fatalf("Failed to start server: %v", err)}
}func handleRequest(c *gin.Context) {service := c.Param("service")commandName := "service_" + service// 使用 Hystrix 实现服务熔断hystrix.ConfigureCommand(commandName, hystrix.CommandConfig{Timeout:               1000, // 超时时间(毫秒)MaxConcurrentRequests: 100,  // 最大并发请求数ErrorPercentThreshold: 25,   // 错误百分比阈值})hystrix.Do(commandName, func() error {// 获取客户端传入的 tokentoken := c.GetHeader("Authorization")fmt.Println("token", token)// 创建请求req, err := http.NewRequest("GET", "http://localhost:8080/"+service, nil)if err != nil {return err}// 添加认证 tokenreq.Header.Set("Authorization", token)// 发送请求resp, err := http.DefaultClient.Do(req)if err != nil {return err}defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)// 将目标服务的响应返回给客户端c.Status(resp.StatusCode)fmt.Println("status:", string(body))_, err = c.Writer.Write(body)return err}, func(err error) error {// 处理熔断c.JSON(http.StatusServiceUnavailable, gin.H{"error": "Service unavailable"})return nil})
}

2、postman调用

使用先前生成的token,服务转发的之前服务的url,参看我上一篇文章:


http://www.ppmy.cn/server/27373.html

相关文章

Day28-Java基础之Arrays类和lambda表达式

Arrays类 //Arrays类 int[] arr{1,2,3,4,5,6}; System.out.println(Arrays.toString(arr)); System.out.println(Arrays.binarySearch(arr,3));//不存在返回-插入点再-1 int[] newArrArrays.copyOf(arr,10); System.out.println(Arrays.toString(newArr)); int[] n…

Spring Boot项目中的ASCII艺术字

佛祖保佑: ${spring-boot.formatted-version} ———————————————————————————————————————————————————————————————————— // _ooOoo_ …

RAM(内存)和 Cache(缓存)终于理清了

主页: 元存储博客 文章目录 引子1. 基本概念2. RAM 和 缓存共同点3. RAM 和 缓存区别4. 百闻不如一问4.1 为什么 Cache 容量小?4.2 L1 Cache 容量为什么20年没有发展4.3 Cache 为什么贵?4.4 为什么Cache 比 内存快总结引子 晚上从锅里(内存)里盛出来一碗香喷喷的卤牛肉到…

Docker Compose 文件 v2 和 v3 版本的区别

Docker Compose 文件 v2 和 v3 版本的区别 版本声明 在 Docker Compose 文件的开头,您需要声明正在使用的 Compose 版本。v2 版本的声明如下: version: 2而 v3 版本的声明如下: version: 3服务定义 在 v2 版本中,服务定义使用…

【C++】详解string类

目录 简介 框架 构造 全缺省构造函数 ​编辑 传对象构造函数 拷贝构造 析构函数 容量 size() capacity() empty() clear() reserve() ​编辑 resize() 遍历 检引用符号"[ ]"的重载 迭代器 begin() end() rbegin() rend(…

bun 换源 国内阿里源 npmmirror 加速下载

Github https://github.com/oven-sh/bun 版本号 bun 1.1.5 windows 安装 bun 如果本机有 nodejs 环境, 可以 npm install -g bun 安装 ( 官方把 exe 已经传到了 npm 仓库, 走的国内 npm 镜像, 下载速度会很快) 没有 nodejs, 可以用 powershell 脚本安装 具体操作 全局 …

《QT实用小工具·四十四》支持图片和动图的文本编辑器

1、概述 源码放在文章末尾 该项目实现了一个功能丰富的文本编辑器,除了包含文本常规的编辑功能,还包括图片的插入功能和动图的插入功能,项目demo演示如下所示: 项目部分代码如下所示: #include "imagehelper.…

C# 实现格式化文本导入到Excel

目录 需求 Excel 的文本文件导入功能 范例运行环境 配置Office DCOM 实现 组件库引入 OpenTextToExcelFile 代码 调用 小结 需求 在一些导入功能里,甲方经常会给我们一些格式化的文本,类似 CSV 那样的纯文本。比如有关质量监督的标准文件&…

并发情况下,Elasticsearch 保证读写一致的方法

1: 可以通过版本号使用乐观并发控制,以确保新版本不会被旧版本覆盖,由应用层来处理具体的冲突; 2: 另外对于写操作,一致性级别支持 quorum/one/all,默认为 quorum,即只有当大多数分…

C++ (11)常用代码

1、日志显示当前时间 #include <iostream> #include <chrono>int main() {auto now std::chrono::system_clock::now();std::time_t now_c std::shrono::system_clock::to_time_t(now);char buffer [26];ctime_s(buffer, sizeof(buffer), &now_c);std::cout…

Postman - Error: Invalid character in header content [“gwm-ctx-user-ext“] 解决

问题&#xff1a; 系统做数据权限&#xff0c;通过header传用户信息&#xff0c;用户信息json串中含中文&#xff0c;调试的时候报&#xff1a; Error: Invalid character in header content ["gwm-ctx-user-ext"] 解决&#xff1a; 1、全选header的value内容&am…

AI视频教程下载:用 ChatGPT 和 WordPress 创建赚钱网站

您是否有兴趣开设网站&#xff08;博客&#xff09;&#xff0c;但不知道从何入手&#xff1f; 或者您已经开设了网站&#xff08;博客&#xff09;&#xff0c;但难以从中获利&#xff1f; 别找啦&#xff01; 本课程旨在教授您使用 WordPress 创建成功盈利网站&#xff08;博…

状态模式

文章目录 1.UML类图2.状态基类3.状态实现类3.状态机管理类使用示例 1.UML类图 2.状态基类 public abstract class State {public string? Name { get; set; }public StateMachine? StateMachine {get; set;}public abstract void Exit();public abstract void Enter(); }3.…

5G随身WiFi推荐测评:品速5G VS 格行5G随身WiFi,随身wifi哪个品牌网速好?性价比更高?

玩游戏卡顿遭吐槽&#xff0c;直播掉线成笑柄&#xff0c;4G网络已难满足需求。5G随身wifi虽受追捧&#xff0c;但价格较高令人犹豫。面对众多品牌&#xff0c;随身WiFi哪个品牌靠谱呢&#xff1f;性价比高呢&#xff1f;今天就来测评一下口碑最好的无线随身WiFi格行5G随身wifi…

C、C++的联合体:union关键字含义

C、C的联合体&#xff1a;union关键字含义 **联合体&#xff08;Union&#xff09;**在C语言中是一种特殊的数据结构&#xff0c;它允许在相同的内存位置存储不同的数据类型。但是&#xff0c;在任何时候&#xff0c;联合体中只有一个成员是有效的&#xff0c;因为所有的成员都…

LeetCode 611. 有效三角形的个数

原题链接&#xff1a;611. 有效三角形的个数 - 力扣&#xff08;LeetCode&#xff09; 题目说&#xff0c;给定一个包含非负整数的数组 num&#xff0c;返回其中可以组成三角形三条边的三元组个数。 示例&#xff1a; nums [4, 2, 3, 4]&#xff1b; 有效组合如下&#xff1a;…

【DIY小记】用爬虫+clean-mark+zhihu-on-vscode搬运技术博客到知乎

今天灵光一闪&#xff0c;决定调研一下自己的技术博客&#xff0c;可以怎样方便迁移到其它社媒平台。想要达到的效果是&#xff0c;把自己在掘金的专栏&#xff1a;从1到∞精通Python&#xff0c;迁移到知乎上面去。 简单花了两三小时时间&#xff0c;找到一个比较快捷的方法&…

maven聚合,继承等方式

需要install安装到本地仓库&#xff0c;或者私服&#xff0c;方可使用自己封装项目 编译&#xff0c;测试&#xff0c;打包&#xff0c;安装&#xff0c;发布 parent: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://mav…

【QT教程】QT6 QML性能优化入门与进阶

QT6 QML性能优化入门与进阶 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频…

Vue项目打包APK----Vue发布App

时隔多年我又来跟新了&#xff0c;今天给大普家及下前端Vue傻瓜式发布App&#xff0c;话不多说直接上干货。 首先准备开发工具HBuilder X&#xff0c;去官网直接下载即可&#xff0c;算了直接给你们上地址吧HBuilderX-高效极客技巧。 打开软件&#xff0c;文件-->新建--&g…