springCloud学习笔记(五)——OpenFeign服务调⽤映射

一、OpenFeign的作用和含义

在使用restTemplate访问远程接口的时候,我们难以将接口管理起来,当接口变动的时候我们可能会修改多处。Spring Cloud 提供OpenFeign来解决这个问题。本文将通过配置OpenFeign来访问远程服务。OpenFeign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。

二、OpenFeign的使用

1.引入库

  1. <!--openfeign -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-openfeign</artifactId>
  5. </dependency>

2.application配置文件内容

  1. server:
  2. port: 82
  3. eureka:
  4. instance:
  5. hostname: eureka7001.com #eureka服务端的实例名称
  6. instance-id: clientOpenFeign82 #服务中心中具体区分的名称
  7. prefer-ip-address: true #访问路径可以显示IP地址
  8. lease-renewal-interval-in-seconds: 1 #向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
  9. lease-expiration-duration-in-seconds: 2 #收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除
  10. client:
  11. register-with-eureka: true #false表示不向注册中心注册自己
  12. fetch-registry: true #false表示自己端就是注册中心
  13. service-url:
  14. # defaultZone: http://eureka7001.com:7001/eureka/ #单机
  15. defaultZone: http://eureka7001.com:7001/eureka/ #集群
  16. server:
  17. # 关闭自我保护机制,保证不可用服务被及时剔除
  18. enable-self-preservation: false
  19. eviction-interval-timer-in-ms: 2000
  20. # 连接超时时间设置为3s
  21. ribbon:
  22. ReadTimeout: 6000
  23. ConnectionTimeout: 6000
  24. #注册服务中心得名字
  25. spring:
  26. application:
  27. name: cloud-eureka-openfeign
  28. datasource:
  29. type: com.alibaba.druid.pool.DruidDataSource
  30. driver-class-name: org.gjt.mm.mysql.Driver
  31. url: jdbc:mysql://101.34.49.127:3306/cloud?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false
  32. username: 数据库用户名
  33. password: 数据库密码
  34. mybatis:
  35. mapper-locations: classpath:mapper/*.xml

3.main方法声明使用feign组件

  1. @SpringBootApplication
  2. //声明使用feign组件
  3. @EnableFeignClients
  4. public class CloudEurekaOpenfeignApplication82 {
  5. public static void main(String[] args) {
  6. SpringApplication.run(CloudEurekaOpenfeignApplication82.class, args);
  7. }
  8. }

4.Controller控制层代码

  1. @RestController
  2. public class PaymentController {
  3. @Resource
  4. Payment82Service payment82Service;
  5. /***
  6. * description: 通过id查询Payment数据
  7. * version: 1.0 -&gt;
  8. * date: 2021/11/17 13:55
  9. * author: xiaYZ
  10. * iteration: 迭代说明
  11. * @param id
  12. * @return com.example.comment.entity.CommonResult&lt;com.example.comment.entity.Payment&gt;
  13. */
  14. @GetMapping("findPaymentById/{id}")
  15. public CommonResult&lt;Payment&gt; findPaymentById(@PathVariable("id") Long id){
  16. CommonResult&lt;Payment&gt; commonResult = new CommonResult&lt;&gt;();
  17. try{
  18. commonResult = payment82Service.findPaymentById(id);
  19. }catch (Exception e){
  20. e.printStackTrace();
  21. }
  22. return commonResult;
  23. }
  24. }

5.service层代码

  1. /**
  2. * @description: 连接CLOUD-EUREKA-SERVICE注册服务
  3. * @author: xiaYZ
  4. * @createDate: 2021/11/17
  5. * @version: 1.0
  6. */
  7. @Component
  8. @FeignClient(value = "CLOUD-EUREKA-CLIENT",path = "paymentController")
  9. public interface Payment82Service {
  10. /**
  11. * description: 通过id查询Payment数据
  12. * version: 1.0
  13. * date: 2021/11/17 14:38
  14. * author: xiaYZ
  15. * iteration: 迭代说明
  16. * @param id
  17. * @return
  18. */
  19. @GetMapping(value = "findPaymentById/{id}")
  20. CommonResult<Payment> findPaymentById(@PathVariable("id") Long id);
  21. }
  1. @FeignClient注解说明连接服务的名称,服务名称为CLOUD-EUREKA-CLIENT1. path代表统一前缀,即提供服务的路径为paymentController/findPaymentById/id1. 若无CommonResult类可用实体类,或String

6.测试结果

5.OpenFeign服务调⽤映射 - 图1

如图调用82端口返回数据,此数据其实是 CLOUD-EUREKA-CLIENT服务提供的

项目地址: https://gitee.com/xyz1041221997/springcloud.git