前端处理API接口故障:多接口自动切换的实现方案
因为在开发APP,一个接口如果不通(被挂了)又不能改了重新打包让用户再下载软件更新,所以避免这种情况,跟后端讨论多备用接口地址自动切换的方案,自动切换到备用的接口地址,并保证后续所有的请求都使用当前可用的接口地址,以供参考(非必要可以不使用)。
其实这种会出现很多问题,当不同的用户访问的服务器地址不一样,而每个服务器的数据又不完全同步。所以后端方案是数据库统一,负载均衡。
解决方案思路:
- 接口地址列表:维护一个接口地址列表,当请求失败时,依次尝试备用地址。
- 全局可用接口地址:一旦找到一个可用的接口地址,所有后续请求都会使用该地址,直到它不可用时再进行切换。
- 持久化存储:使用本地存储将当前可用的接口地址存储起来,避免页面刷新后重新从第一个接口地址开始尝试
// 维护当前可用的接口地址,使用本地存储持久化
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 在不同的文件中使用
在实际中工作,我们经常需要使用 el-dialog 来做一个弹框的功能。最常见的就是在父组件中点击一个按纽,然后弹出一个框。而这个框就是子组件。同时,父子组件是分布在不同的文件中。 <!--父组件--> <template> <div> <…...
QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新
QT中采用QCustomPlot 实现将buffer中的数据绘制成折线图,并且图形随着数据更新而更新 为了在 Qt 中将缓冲区的数据动态绘制成折线图,并随着数据的更新而实时更新,可以使用 QCustomPlot 或 Qt 自带的绘图功能,比如 QGraphicsView,或者在更简单的情况下使用 QPainter 在 QW…...
1688API商品详情接口如何获取
获取 1688API商品详情接口主要有以下步骤: 一、注册开发者账号: 访问 1688 开放平台,进行开发者账号注册。这是获取 API 接口使用权限的第一步,注册信息要确保真实准确。 二、了解接口规范和政策: 在 1688 开放平台…...
pytorch + d2l环境配置
文章目录 前言一、安装软件二、配置具体环境 前言 一直想写一篇 pytorch d2l的深度学习环境配置。但一直都不是很顺利,配置过很多次,都会遇到一些各种依赖项的兼容性问题。但这个是没有办法的,各种开源包都在不断维护过程中,版本…...
Go使用exec.Command() 执行脚本时出现:file or directory not found
使用 Go 提供的 exec.Command() 执行脚本时出现了未找到脚本的 bug,三个排查思路 : exec.Command(execName, args…) 脚本名字不允许相对路径 exec.Command(execName, args…) execName 只能有脚本名,不允许出现参数 如果你是使用 Windows …...
细节性知识(宏定义解析与宏的外部引用)
目录 一、问:#define N 50 中的N可以用来做运算比较吗? 二、宏定义怎么外部引用? 例子 总结 一、问:#define N 50 中的N可以用来做运算比较吗? 解析:在C语言中,#define N 50 是一个预处理指…...
面试中的JVM:结合经典书籍的深度解读
写在前面 🔥我把后端Java面试题做了一个汇总,有兴趣大家可以看看!这里👉 ⭐️在无数次的复习巩固中,我逐渐意识到一个问题:面对同样的面试题目,不同的资料来源往往给出了五花八门的解释&#…...
使用语音模块的开发智能家居产品(使用雷龙LSYT201B 语音模块)
在这篇博客中,我们将探讨如何使用 LSYT201B 语音模块 进行智能设备的语音交互开发。通过这个模块,我们可以实现智能设备的语音识别和控制功能,为用户带来更为便捷和现代的交互体验。 1. 语音模块介绍 LSYT201B 是一个基于“芯片算法”的语音…...
深入理解支持向量机:从基本原理到实际应用
第6章 支持向量机 在本章中,我们将深入探讨支持向量机(SVM)这一强大的分类算法。SVM在模式识别和机器学习领域广泛应用,尤其在处理高维数据时表现出色。我们将依次讨论间隔与支持向量、对偶问题、核函数、间隔与正则化、支持向量…...
每天一题:洛谷P2041分裂游戏
题目描述 有一个无限大的棋盘,棋盘左下角有一个大小为 n 的阶梯形区域,其中最左下角的那个格子里有一枚棋子。你每次可以把一枚棋子“分裂”成两枚棋子,分别放在原位置的上边一格和右边一格。(但如果目标位置已有棋子,…...
简单的 curl HTTP的POSTGET请求以及ip port连通性测试
简单的 curl HTTP的POST&GET请求以及ip port连通性测试 1. 需求 我们公司有一个演示项目,需要到客户那边进行项目部署,项目部署完成后我们需要进行项目后端接口的测试功能,但是由于客户那边么有条件安装类似于postman这种的测试工具&am…...
ubuntu下快捷键启动程序
背景:公司自开发的软件,经常需要启动,每次去找目录启动很麻烦,所以想快捷启动 方法1: 通过编辑.baserc启动 例如启动程序是toolA, 放在/home/user/software/目录下,那么在~/.baserc里面加入一行代码 al…...
Yii2 init 初始化脚本分析
脚本目的: init 脚本主要的作用是:从 environments 目录中复制配置文件,确保应用适配不同环境(例如开发、生产环境等)。 工作流程: 获取 $_SERVER 的 argv 参数 加载 environments/index.php 文件&#…...
深入理解gPTP时间同步过程
泛化精确时间协议(gPTP)是一个用于实现精确时间同步的协议,特别适用于分布式系统中需要高度协调的操作,比如汽车电子、工业自动化等。 gPTP通过同步主节点(Time Master)和从节点(Time Slave)的时钟,实现全局一致的时间参考。 以下是gPTP实现主从时间同步的详细过程:…...
基于阿里云服务的移动应用日志管理方案—日志的上传、下载、存档等
前言 如题,基于阿里云服务(ECS、OSS)实现 APP 的用户日志上传以及日志下载的功能,提高用户反馈问题到研发去分析、定位、解决问题的整个工作流的效率。 术语 ECS: 云服务器ECS(Elastic Compute Service)…...
Python浪漫之画星星
效果图(动态的哦!): 完整代码(上教程): import turtle import random import time # 导入time模块# 创建一个画布 screen turtle.Screen() screen.bgcolor("red")# 创建一个海龟&a…...
别再只用SCL当主时钟了!手把手教你用Verilog实现更可靠的I2C从机(附过采样方法)
突破传统:用Verilog构建高可靠I2C从机的过采样实战指南 在FPGA开发中,I2C从机接口的实现方式往往决定了系统的稳定性边界。当工程师们习惯性地将SCL信号直接作为时钟源时,却可能忽视了这种设计在真实硬件环境中暗藏的隐患——信号抖动引发的数…...
Android Studio中文界面:从英文困扰到母语开发的完整解决方案
Android Studio中文界面:从英文困扰到母语开发的完整解决方案 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack 你是否曾…...
PX4倾转垂起固定翼混控配置与硬件适配实战
1. PX4倾转垂起固定翼的核心概念解析 第一次接触倾转垂起固定翼的朋友可能会被这个名词吓到,其实它的原理并不复杂。简单来说,这是一种既能像多旋翼一样垂直起降,又能像固定翼飞机一样高效巡航的混合飞行器。我经手过的项目中,这种…...
STM32从Keil移植到GCC编译环境,搞定startup_stm32f10x_hd.S报错的完整流程
STM32从Keil到GCC编译环境迁移实战指南 当你决定将STM32项目从熟悉的Keil MDK环境迁移到GCC工具链时,可能会遇到一系列令人头疼的兼容性问题。作为一名经历过多次环境迁移的嵌入式开发者,我深知这个过程可能遇到的陷阱。本文将带你系统性地解决从启动文件…...
LeagueAkari游戏数据分析工具:从新手到高手的完整进阶攻略
LeagueAkari游戏数据分析工具:从新手到高手的完整进阶攻略 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在英雄联盟游戏…...
3个步骤让你在Windows上轻松安装安卓应用:APK安装器完全指南
3个步骤让你在Windows上轻松安装安卓应用:APK安装器完全指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否曾经想过,如果能在Windows电…...
终极Vim分屏体验:vim-airline轻量级状态栏与标签栏全攻略
终极Vim分屏体验:vim-airline轻量级状态栏与标签栏全攻略 【免费下载链接】vim-airline lean & mean status/tabline for vim thats light as air 项目地址: https://gitcode.com/gh_mirrors/vi/vim-airline vim-airline是一款轻量级的Vim状态栏与标签栏…...
STM32F103C8T6驱动MAX30102:从CubeMX配置到心率可视化,一个LED灯带你看懂心跳
STM32F103C8T6驱动MAX30102:从硬件交互到心跳可视化实战 当你第一次看到LED灯随着自己的心跳节奏闪烁时,那种将生物信号转化为物理反馈的奇妙体验,正是嵌入式开发的魅力所在。本文将带你用STM32F103C8T6和MAX30102血氧传感器,打造…...
从DesignCon 2011看EDA技术演进:高速链路、低功耗与3D-IC设计启示
1. 从一场行业盛会看电子设计的未来风向每年年初,硅谷的心脏地带——加州圣克拉拉,都会迎来一场电子设计自动化(EDA)与半导体设计领域的年度盛事:DesignCon。对于像我这样在硬件设计领域摸爬滚打了十几年的工程师来说&…...
Xendit支付网关MCP服务端:东南亚支付集成的架构设计与工程实践
1. 项目概述:一个面向东南亚支付场景的MCP服务端最近在对接东南亚市场的支付业务时,遇到了一个挺有意思的挑战:如何高效、安全地集成Xendit这家东南亚主流的支付网关。Xendit提供的API功能强大,覆盖了印尼、菲律宾等国的多种本地化…...
