最近有一个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的重复性调用 优化的更多相关文章

  1. Spring-Cloud之Feign声明式调用-4

    一.Feign受Retrofit.JAXRS-2.0和WebSocket影响,采用了声明式API 接口的风格,将Java Http 客户端绑定到它的内部. Feign 首要目的是将 Java Http ...

  2. SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer);

    SpringCloud使用Feign调用其他客户端带参数的接口,传入参数为null或报错status 405 reading IndexService#del(Integer); 第一种方法: 如果你 ...

  3. SpringCloud(5)---Feign服务调用

    SpringCloud(5)---Feign服务调用 上一篇写了通过Ribbon进行服务调用,这篇其它都一样,唯一不一样的就是通过Feign进行服务调用. 注册中心和商品微服务不变,和上篇博客一样,具 ...

  4. springcloud费话之Eureka接口调用(feign)

    目录: springcloud费话之Eureka基础 springcloud费话之Eureka集群 springcloud费话之Eureka服务访问(restTemplate) springcloud ...

  5. SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)

    FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...

  6. 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务

    笔记 5.微服务调用方式之feign 实战 订单调用商品服务     简介:改造电商项目 订单服务 调用商品服务获取商品信息         Feign: 伪RPC客户端(本质还是用http)    ...

  7. 学习一下 SpringCloud (三)-- 服务调用、负载均衡 Ribbon、OpenFeign

    (1) 相关博文地址: 学习一下 SpringCloud (一)-- 从单体架构到微服务架构.代码拆分(maven 聚合): https://www.cnblogs.com/l-y-h/p/14105 ...

  8. SpringCloud 在Feign上使用Hystrix(断路由)

    SpringCloud  在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...

  9. springcloud 实战 feign使用中遇到的相关问题

    springcloud 实战 feign使用中遇到的相关问题 1.使用feign客户端调用其他微服务时,session没有传递成功,sessionId不一样. /** * @author xbchen ...

随机推荐

  1. linux命令-vim一般模式下光标移动

    vim 有一般模式,编辑模式,命令模式 ///////一般模式可以光标移动,复制,剪切,粘贴     编辑模式可以输入想输入的字符       命令模式刚才用到了set nu //////////// ...

  2. github 分支操作

    1.查看分支 1.查看本地分支 使用git branch命令,如下: $ git branch * master *标识的是你当前所在的分支. 2.查看远程分支 命令如下: git branch -r ...

  3. Entity Framework Code-First(9.6):DataAnnotations - StringLength Attribute

    DataAnnotations - StringLength Attribute: StringLength attribute can be applied to a string type pro ...

  4. 看下面代码输出结果Java

    编译错误 在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器, ...

  5. 如何保持blog的高质量(相对于自己的进步而言的)

    多写! 多改!! 多删!!!

  6. Extensions for Vue

    Extensions for Vue Original post url:https://www.cnblogs.com/markjiang7m2/p/10833790.html If you are ...

  7. heap 堆

    实现了交换.向上维护,向下维护的原子功能,其它插入.删除.修改的功能应该不在话下. 于是有了代码:(luogu3378模板题) // luogu-judger-enable-o2 #include & ...

  8. android--系统路径获取

    Environment 常用方法: * 方法:getDataDirectory()解释:返回 File ,获取 Android 数据目录.* 方法:getDownloadCacheDirectory( ...

  9. Hadoop 2.0完全分布式集群搭建方法(CentOS7+Hadoop 2.7.7)

    本文详细介绍搭建4个节点的完全分布式Hadoop集群的方法,Linux系统版本是CentOS 7,Hadoop版本是2.7.7,JDK版本是1.8. 一.准备环境 1. 在VMware worksta ...

  10. plpython 中文分词Windows下 PG数据库jieba分词

    windows 下安装版本匹配python-3.4.3.amd64.msipostgresql-10.1-2-windows-x64.exe create language plpython3u;se ...