当前位置: 首页 > news >正文

前端处理API接口故障:多接口自动切换的实现方案

因为在开发APP,一个接口如果不通(被挂了)又不能改了重新打包让用户再下载软件更新,所以避免这种情况,跟后端讨论多备用接口地址自动切换的方案,自动切换到备用的接口地址,并保证后续所有的请求都使用当前可用的接口地址,以供参考(非必要可以不使用)

其实这种会出现很多问题,当不同的用户访问的服务器地址不一样,而每个服务器的数据又不完全同步。所以后端方案是数据库统一,负载均衡。

解决方案思路:
  1. 接口地址列表:维护一个接口地址列表,当请求失败时,依次尝试备用地址。
  2. 全局可用接口地址:一旦找到一个可用的接口地址,所有后续请求都会使用该地址,直到它不可用时再进行切换。
  3. 持久化存储:使用本地存储将当前可用的接口地址存储起来,避免页面刷新后重新从第一个接口地址开始尝试
// 维护当前可用的接口地址,使用本地存储持久化
let currentInterfaceUrl = uni.getStorageSync('currentInterfaceUrl') || 'http://192.168.0.165:8889/platform-api/app/';
const interfaceUrls = ['http://192.168.0.165:8889/platform-api/app/', 'http://192.168.0.166:8889/platform-api/app/', 'http://192.168.0.167:8889/platform-api/app/'
];// 通用的请求方法
function request(url, postData = {}, method = "GET", contentType = "application/json") {return new Promise((resolve, reject) => {function tryRequest(attempt) {if (attempt >= interfaceUrls.length) {reject('所有接口地址均不可用');return;}let currentUrl = interfaceUrls[attempt];uni.request({url: currentUrl + url,data: postData,header: {'content-type': contentType,'token': uni.getStorageSync('token') // 获取token},method: method,success: (res) => {if (res.statusCode === 200) {// 更新全局接口地址if (currentInterfaceUrl !== currentUrl) {currentInterfaceUrl = currentUrl;uni.setStorageSync('currentInterfaceUrl', currentInterfaceUrl);}resolve(res.data);} else {reject(res.data.msg);}},fail: () => {console.log('当前接口地址不可用,尝试下一个地址...');tryRequest(attempt + 1);  // 尝试下一个接口地址}});}// 从当前可用的接口地址开始请求let attempt = interfaceUrls.indexOf(currentInterfaceUrl);tryRequest(attempt);});
}

相关文章:

前端处理API接口故障:多接口自动切换的实现方案

因为在开发APP,一个接口如果不通(被挂了)又不能改了重新打包让用户再下载软件更新,所以避免这种情况,跟后端讨论多备用接口地址自动切换的方案,自动切换到备用的接口地址,并保证后续所有的请求都…...

多租户架构的全景分析(是什么?基本概念、实现策略、资源管理和隔离、数据安全与隔离、性能优化、扩展性与升级、案例研究)

文章目录 1. 多租户的基本概念2. 多租户的实现策略2.1 独立数据库模式2.2 共享数据库-独立Schema模式2.3 共享数据库-共享Schema模式 3. 资源管理和隔离4. 数据安全与隔离5. 性能优化6. 扩展性与升级7. 案例研究总结 多租户架构在云计算和SaaS应用中越来越流行,因为…...

Git使用问题汇总附带解决方法(持续更新)

Git使用问题汇总附带解决方法 一 git pull 代码时报错: Auto packing the repository in background for optimum performance. See “git help gc“ 一 git pull 代码时报错: Auto packing the repository in background for optimum performance. See …...

Spring Boot驱动的植物健康监测革命

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理植物健康系统的相关信息成为必然。开发合适…...

element 中 el-dialog 在不同的文件中使用

在实际中工作&#xff0c;我们经常需要使用 el-dialog 来做一个弹框的功能。最常见的就是在父组件中点击一个按纽&#xff0c;然后弹出一个框。而这个框就是子组件。同时&#xff0c;父子组件是分布在不同的文件中。 <!--父组件--> <template> <div> <…...

QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新

QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新 为了在 Qt 中将缓冲区的数据动态绘制成折线图,并随着数据的更新而实时更新,可以使用 QCustomPlot 或 Qt 自带的绘图功能,比如 QGraphicsView,或者在更简单的情况下使用 QPainter 在 QW…...

1688API商品详情接口如何获取

获取 1688API商品详情接口主要有以下步骤&#xff1a; 一、注册开发者账号&#xff1a; 访问 1688 开放平台&#xff0c;进行开发者账号注册。这是获取 API 接口使用权限的第一步&#xff0c;注册信息要确保真实准确。 二、了解接口规范和政策&#xff1a; 在 1688 开放平台…...

pytorch + d2l环境配置

文章目录 前言一、安装软件二、配置具体环境 前言 一直想写一篇 pytorch d2l的深度学习环境配置。但一直都不是很顺利&#xff0c;配置过很多次&#xff0c;都会遇到一些各种依赖项的兼容性问题。但这个是没有办法的&#xff0c;各种开源包都在不断维护过程中&#xff0c;版本…...

Go使用exec.Command() 执行脚本时出现:file or directory not found

使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug&#xff0c;三个排查思路 &#xff1a; exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名&#xff0c;不允许出现参数 如果你是使用 Windows …...

细节性知识(宏定义解析与宏的外部引用)

目录 一、问&#xff1a;#define N 50 中的N可以用来做运算比较吗&#xff1f; 二、宏定义怎么外部引用&#xff1f; 例子 总结 一、问&#xff1a;#define N 50 中的N可以用来做运算比较吗&#xff1f; 解析&#xff1a;在C语言中&#xff0c;#define N 50 是一个预处理指…...

面试中的JVM:结合经典书籍的深度解读

写在前面 &#x1f525;我把后端Java面试题做了一个汇总&#xff0c;有兴趣大家可以看看&#xff01;这里&#x1f449; ⭐️在无数次的复习巩固中&#xff0c;我逐渐意识到一个问题&#xff1a;面对同样的面试题目&#xff0c;不同的资料来源往往给出了五花八门的解释&#…...

使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)

在这篇博客中&#xff0c;我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块&#xff0c;我们可以实现智能设备的语音识别和控制功能&#xff0c;为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…...

深入理解支持向量机:从基本原理到实际应用

第6章 支持向量机 在本章中&#xff0c;我们将深入探讨支持向量机&#xff08;SVM&#xff09;这一强大的分类算法。SVM在模式识别和机器学习领域广泛应用&#xff0c;尤其在处理高维数据时表现出色。我们将依次讨论间隔与支持向量、对偶问题、核函数、间隔与正则化、支持向量…...

每天一题:洛谷P2041分裂游戏

题目描述 有一个无限大的棋盘&#xff0c;棋盘左下角有一个大小为 n 的阶梯形区域&#xff0c;其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子&#xff0c;分别放在原位置的上边一格和右边一格。&#xff08;但如果目标位置已有棋子&#xff0c…...

简单的 curl HTTP的POSTGET请求以及ip port连通性测试

简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目&#xff0c;需要到客户那边进行项目部署&#xff0c;项目部署完成后我们需要进行项目后端接口的测试功能&#xff0c;但是由于客户那边么有条件安装类似于postman这种的测试工具&am…...

ubuntu下快捷键启动程序

背景&#xff1a;公司自开发的软件&#xff0c;经常需要启动&#xff0c;每次去找目录启动很麻烦&#xff0c;所以想快捷启动 方法1&#xff1a; 通过编辑.baserc启动 例如启动程序是toolA, 放在/home/user/software/目录下&#xff0c;那么在~/.baserc里面加入一行代码 al…...

Yii2 init 初始化脚本分析

脚本目的&#xff1a; init 脚本主要的作用是&#xff1a;从 environments 目录中复制配置文件&#xff0c;确保应用适配不同环境&#xff08;例如开发、生产环境等&#xff09;。 工作流程&#xff1a; 获取 $_SERVER 的 argv 参数 加载 environments/index.php 文件&#…...

深入理解gPTP时间同步过程

泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…...

基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等

前言 如题&#xff0c;基于阿里云服务&#xff08;ECS、OSS&#xff09;实现 APP 的用户日志上传以及日志下载的功能&#xff0c;提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。 术语 ECS: 云服务器ECS&#xff08;Elastic Compute Service&#xff09;…...

Python浪漫之画星星

效果图&#xff08;动态的哦&#xff01;&#xff09;&#xff1a; 完整代码&#xff08;上教程&#xff09;&#xff1a; import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍&#xff1a; img 属性指定分区存放的 image 名称&#xff0c;指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件&#xff0c;则以 proj_name:binary_name 格式指定文件名&#xff0c; proj_name 为工程 名&…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...