springboot整合openfeign配置微信小程序登录,并解决超时问题

news/2024/11/17 23:40:16/

在使用springcloud作为技术栈的时候,在rpc通信方面,有很多框架选择,例如dubbo,openfeign等。

OpenFeign是一个声明式的web服务客户端,它使得编写Web服务客户端变得非常容易。它使用基于注解的方式来定义和实现Web服务客户端。OpenFeign将Web服务API的定义与客户端的实现分离开来,从而使得Web服务API的维护变得更加简单。OpenFeign内置了对负载均衡、服务发现和断路器等功能的支持,使得在微服务架构中使用OpenFeign更加便捷。

springboot整合openfeign

maven

<properties><java.version>21</java.version><spring-cloud.version>2022.0.0</spring-cloud.version><spring-cloud-alibaba.version>2022.0.0.0</spring-cloud-alibaba.version>
</properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId></dependency>
</dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

 配置类

@Configuration
public class FeignConfig {@Beanpublic Logger.Level feignLoggerLevel() {return Logger.Level.FULL;}
}

rpc类

@FeignClient(url = "https://api.weixin.qq.com", name = "wx")
public interface WxService {@GetMapping("/sns/jscode2session")String jscode2session(@RequestParam String appid, @RequestParam String secret, @RequestParam String js_code, @RequestParam String grant_type);@PostMapping("/wxa/business/getuserphonenumber")WxResponse getuserphonenumber(@RequestBody WxRequest wxRequest, @RequestParam String access_token);@GetMapping("/cgi-bin/token")TokenResponse token(@RequestParam String grant_type, @RequestParam String appid, @RequestParam String secret);
}

dto类 

public record TokenResponse(String access_token, Integer expires_in) {
}
public record WxResponse(String openid,String session_key,String unionid,int errcode,String errmsg
) {}

启动类

@SpringBootApplication
@EnableFeignClients
public class PlatformApplication {public static void main(String[] args) {SpringApplication.run(PlatformApplication.class, args);}}

测试类 

@Test
void testCode() {TokenResponse token = wxService.token("client_credential", "wxxxxxxxxx", "xxxxxxxxxx");System.out.println(token);var wxResponse = wxService.getuserphonenumber(new WxRequest("xxxxxxxxxxxxxxxxxxxxxxx"), token.access_token());System.out.println(wxResponse);
}

网络环境不好造成的超时问题

解决方案,一般遇到openfeign调用时超时有两种情况,一种是调用三方服务,一种是自己的服务,解决方案和思路也有差距

三方服务 

三方服务的特点是自己只作为调用方无法控制被调用的代码,而且也无法确定对方的网络以及代码执行情况

可以通过添加超时时间 

在配置文件中添加

feign:client:config:default:connectTimeout: 1500readTimeout: 1500

自己服务 

超时的原因可能时因为服务不稳定,可以采取重试策略

由于openfeign是默认不支持重试的,需要添加添加配置类,具体的时间需要根据实际情况填写,毕竟内网请求太久多半是服务架构不合理

@Configuration
public class FeignConfigure {@Beanpublic Retryer feignRetryer(){Retryer retryer = new Retryer.Default(100, 1000, 2);return retryer;}
}

 优化下又服务

找到超时的原因,可能是数据库查询没走索引,可能是大文件读写等问题,需要优化代码逻辑

!!!!内网不建议配置超时时间 


http://www.ppmy.cn/news/1215723.html

相关文章

【JavaEE】Servlet(创建Maven、引入依赖、创建目录、编写及打包、部署和验证、smart Tomcat)

一、什么是Servlet&#xff1f; Servlet 是一种实现动态页面的技术. 是一组 Tomcat 提供给程序猿的 API, 帮助程序猿简单高效的开发一个 web app 1.1 Servlet能干什么&#xff1f; &#x1f695;允许程序猿注册一个类, 在 Tomcat 收到某个特定的 HTTP 请求的时候, 执行这个类…

DaoWiki(基于Django)开发笔记 20231114-阿里云mysql外部访问

文章目录 创建mysql用户&#xff0c;用户远程访问配置阿里云安全策略下载安装mysql workbench 创建mysql用户&#xff0c;用户远程访问 创建用户 CREATE USER dao_wiki% IDENTIFIED BY password;授权访问dao_wiki数据库 GRANT ALL PRIVILEGES ON dao_wiki.* TO dao_wiki%; F…

samba 共享目录write permission deny问题修复 可读取内容但不可修改 删除 新增文件

关于 update/delete/write permission deny问题修复 0.首先在服务器端执行testparm -s &#xff0c;测试 Samba 配置并显示结果。需确保服务器端参数 read only No &#xff0c;共享目录有写入权限 一、若配置了允许匿名访问&#xff0c;使用匿名访问来操作smb需要做如下处理…

Spring后端HttpClient实现微信小程序登录

这是微信官方提供的时序图。我们需要关注的是前后端的交互&#xff0c;以及服务端如何收发网络请求。 小程序端 封装基本网络请求 我们先封装一个基本的网络请求。 const baseUrl"localhost:8080" export default{sendRequsetAsync } /* e url&#xff1a;目标页…

什么是智能井盖?万宾科技的智能井盖传感器的效果

近年来为打造智慧城市政府一直在不懈努力。加速城市基础建设是一项重要的举措&#xff0c;它有助于推动城市综合治理城市生命线的建设工程。在改善市民生活质量的过程中&#xff0c;市政部门正积极进行井盖的改进和升级工作&#xff0c;特别是那些看似微不足道的井盖却蕴含着重…

WordPress 文档主题模板Red Line -v0.2.2

此主题作为框架&#xff0c;做承载第三方页面之用&#xff0c;例如飞书文档等&#xff0c; 您可以将视频图片等资源放第三方文档上&#xff0c;通过使用此主题做目录用。 此主题使用前后端分离开发&#xff0c;也使用了一些技术尽量不影响正常的SEO&#xff0c;还望注意。 源码…

LeetCode(10)跳跃游戏 II【数组/字符串】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 45. 跳跃游戏 II 1.题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nu…

P36[11-1]SPI通信协议

SPI相比于IIC的优缺点: 1.SPI传输速度快(IIC高电平驱动能力较弱,因此无法高速传输) 2.使用简单 3.通信线多 SCK(SCLK,CK,CLK):串行时钟线 MOSI(DO):主机输出,从机输入 MISO(DI): 主机输入,从机输出 SS(NSS,CS):从机选择(有多少个从机,主机就要用几根SS分别与从机连接…