springcloud 之 feign的重复性调用 优化
最近有一个springcloud的feign请求,用于获取坐标经纬度的信息,返回结果永远是固定不变的,所以考虑优化一下,不然每次转换几个坐标都要去请求feign,返回的所有坐标信息,数据量太大导致耗时大,重复性请求。
第一步:创建配置类,用于在springboot项目启动后就执行feign接口用于查询所有的经纬度信息【返回结果封装在了一个map集合】。
@Component
@Order(value = 1)//定义组件加载顺序
@Slf4j
public class GetLatLonConfig implements ApplicationRunner {
@Autowired
private BaseStorageFeignService baseStorageFeignService;
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("=========== 项目启动后,开始执行查询经纬度坐标 的方法 =============");
//查询经纬度
ResponseWrapper<Map<String, Location>> all = baseStorageFeignService.all();
Map<String, Location> tempLocationMap = all.getObj();
if(tempLocationMap == null) {
log.error("====== 项目启动后,执行查询经纬度坐标方法的结果:获取坐标经纬度信息为空");
throw new RuntimeException("获取坐标经纬度信息为空");
}
}
}
第二部: 配置类,用于控制feign接口请求一次之后,如果在调用这个feign接口,就不再真正发送请求,因为第一次请求feign的结果已经封装在了本地的静态变量中。
@Aspect
@Configuration
@Slf4j
public class LocationConfig {
private static Map<String, Location> all = null;
@Pointcut("execution(public * xxxxxx(..))")//xxxxxx 替换为 feign方法所在的全限定性路径名称
public void executeAll() {
}
@Around("executeAll()")
public Object location(ProceedingJoinPoint jp) {
if (all != null) {
return new ResponseWrapper(all);
}
try {
ResponseWrapper<Map<String, Location>> result = (ResponseWrapper<Map<String, Location>>) jp.proceed();
all = result.getObj();
} catch (Throwable throwable) {
log.error("Error.", throwable);
}
return new ResponseWrapper(all);
}
}
当代码中再次调用feign方法时,就不会真正去走微服务feign调用,降低程序运行时间。
springcloud 之 feign的重复性调用 优化的更多相关文章
- Spring-Cloud之Feign声明式调用-4
一.Feign受Retrofit.JAXRS-2.0和WebSocket影响,采用了声明式API 接口的风格,将Java Http 客户端绑定到它的内部. Feign 首要目的是将 Java Http ...
- SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);
SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...
- SpringCloud(5)---Feign服务调用
SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具 ...
- springcloud费话之Eureka接口调用(feign)
目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...
- SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)
FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务
笔记 5.微服务调用方式之feign 实战 订单调用商品服务 简介:改造电商项目 订单服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) ...
- 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign
(1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...
- SpringCloud 在Feign上使用Hystrix(断路由)
SpringCloud 在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...
- springcloud 实战 feign使用中遇到的相关问题
springcloud 实战 feign使用中遇到的相关问题 1.使用feign客户端调用其他微服务时,session没有传递成功,sessionId不一样. /** * @author xbchen ...
随机推荐
- CSS 布局_如何实现容器中每一行的子容器数量随着浏览器宽度的变化而变化?
实现一个浮动布局,红色容器中每一行的蓝色容器数量随着浏览器宽度的变化而变化,就如下图: 要实现这样一个布局,我们首先需要如下的 HTML: <div id="float-contain ...
- sell02 展现层编写
# API ###商品列表 ``` GET /sell/buyer/product/list ``` 参数 ``` 无 ``` 返回 ``` { "code": 0, " ...
- iOS开发,使用CocoaSSDP查找设备时按关键字过滤Device
关于CocoaSSDP的资料有很多,这里就不介绍了. 希望寻找的目标设备,在header中设置了自定义的keyword,虽然通过外围代码也能达到相同目的,但是直接修改CocoaSSDP源码更简便. 导 ...
- String与字符数组
public class Example { static String str = new String("good"); static char[] ch = {'a','b' ...
- Statement, PreparedStatement和CallableStatement的区别
Statement用于执行不带参数的简单SQL语句,并返回它所生成的结果,每次执行SQL豫剧时,数据库都要编译该SQL语句. Satatement stmt = conn.getStatement() ...
- 7. IIS短文件/文件夹漏洞(汇总整理)
漏洞的成因与分析: 1)利用“~”字符猜解暴露短文件/文件夹名. 2).Net Framework的拒绝服务攻击. 现在看大部分的分析讨论都是第一个的.第二个比较少.这里简单复述一下其他研究人员的分析 ...
- setTimeout关于函数名做参数的问题
前几天在调bug时发现一个诡异的问题. function test(){ alert('4 seconds!'); } setTimeout(test(),4000); 这段代码立即执行,当时看不出问 ...
- 第一个 Django 应用
1. 创建项目 1.1 新建项目 首先新建一个项目,名为 mysite,命令如下: django-admin startproject mysite # 或用 django-admin.py 运行成功 ...
- 第一个Python工程
创建你的第一个Python程序 如果你曾经很熟悉visual studio的工作方式.可能对python不习惯. 工程通常只与你使用的IDLE有关系.这些工具习惯将文档,编译,测试集成一体.所以就存在 ...
- Git fatal:$'GIT_DIR' too big
这句表示的是创建的文件的名称太长了,将你需要放置的代码的文件名字改短一些即可!