SpringCloud中Feign的适配器的实现方案

前端之家收集整理的这篇文章主要介绍了SpringCloud中Feign的适配器的实现方案前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

最近在做微服务的项目,各个系统之间需要进行调用,然后用一个适配器来实现服务之间的feign调用,使用适配器进行统一管理

实现方案

首先我们需要将服务的名称进行单独的配置,可以方便的进行切换和扩展,我们使用bootstrap.yml来进行配置,这样引入jar包的时候,可以将配置互补到我们本身项目的application.yml中。
在我们的bootstrap.yml中进行配置。

  1. ## 配置的服务名称
  2. server-name:
  3. # 配置在eureka中注册的服务名称
  4. feignDemo: demo

我们这里配置了一个demo,demo是spring.application.name。我们需要调用demo项目中的接口。
然后配置feign与ribbon

  1. feign:
  2. hystrix:
  3. threadpool:
  4. default:
  5. coreSize: 100
  6. enabled: true
  7. command:
  8. default:
  9. execution:
  10. isolation:
  11. thread:
  12. timeoutInMilliseconds: 30000
  13. circuitBreaker:
  14. requestVolumeThreshold: 1000
  15. ribbon:
  16. ConnectTimeout: 30000
  17. ReadTimeout: 30000

之后我们建立一个feign的接口。

  1. @FeignClient(value = "${server-name.feignDemo}")
  2. @Component
  3. public interface IDemoFeign {
  4. @PostMapping("/demo/list")
  5. public List<Demo> findDemoListByQueryVO(
  6. @RequestBody DemoFeignQueryVO demoFeignQueryVO);
  7. }

我们通过用$取值的方式来获取服务的名称。接口内的方法必须与服务中的方法的映射一模一样。这里需要注意的问题是参数必须要用@RequestBody或者@RequestParam来接取。
接下来建立一个controller的类。

  1. @Component
  2. public class DemoApi {
  3. @Autowired
  4. private IDemoFeign iDemoFeign ;
  5. public List<Demo> findDemoListByQueryVO(DemoFeignQueryVO demoFeignQueryVO){
  6. return iDemoFeign .findDemoListByQueryVO(demoFeignQueryVO);
  7. }
  8. }

我们在调用的使用通过controller进行调用,这样,我们以后如果接口有什么问题,可以直接改接口,不用改调用项目的代码
最后,我们建立主启动类,在主启动类中,配置我们刚才建立的controller类,这样打成jar包调用的时候,注入一个主启动类,然后就可以调用其他的api。
主启动类如下:

  1. @SpringBootApplication
  2. @EnableFeignClients
  3. public class ApiAdapter {
  4. public static void main(String[] args) {
  5. SpringApplication.run(ApiAdapter.class,args);
  6. }
  7. @Autowired
  8. public DemoApi demoApi ;
  9. }

我们需要注意的就是需要加上注解@EnableFeignClients。
实现方案结束,将其打成jar包,引入就可使用。

猜你在找的Spring相关文章