先来介绍一下OpenFegin吧!!!
官网的解释:
OpenFeign有什么用:Feignn和OpenFeign两者的区别:
OpenFeign默认支持Ribbon OpenFegin的使用:新建一个cloud-consumer-feign-order80模块
pom
org.springframework.cloud spring-cloud-starter-openfeignorg.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatororg.mybatis.spring.boot mybatis-spring-boot-startercom.alibaba druid-spring-boot-starter1.1.10 mysql mysql-connector-javaorg.springframework.boot spring-boot-starter-jdbcorg.springframework.boot spring-boot-devtoolsruntime true org.projectlombok lomboktrue org.springframework.boot spring-boot-starter-testtest com.atgugui.springcloud cloud-api-commons${project.version} org.springframework.cloud spring-cloud-starter-netflix-eureka-client2.2.7.RELEASE
yml
server:
port: 80
eureka:
client:
register-with-eureka: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
主启动类
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderFeignMain80.class,args);
}
}
业务逻辑接口+@FeignClient配置provider服务
业务接口
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id);
}
控制层:
@RestController
public class OrderFeignController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id){
return paymentFeignService.getPaymentById(id);
}
}
测试!!!
启动微服务 然后访问localhost/consumer/payment/get/31就能看到效果啦!!!
说明一下:
(OpenFigin自带负载均衡配置项)
做个小总结吧
OpenFeign的超时控制:超时设置,故意设置超时演示出错情况:
服务方故意写暂停程序:
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout(){
try { TimeUnit.SECONDS.sleep(3); }catch (Exception e) {e.printStackTrace();}
return serverPort;
}
消费方80添加超时方法:
service:
@GetMapping(value = "/payment/feign/timeout") public String paymentFeignTimeout();
controller:
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeignTimeout(){
return paymentFeignService.paymentFeignTimeout();
}
测试访问 localhost/consumer/payment/feign/timeout
效果:出现错误页面
为什么会出现报错页面呢?
因为OpenFeign默认等待时间是1s,超过这个时间就会报错!!!
那么如何更改等待时间呢?请看如下操作:
在YML文件开启OpenFeign客户端超时控制(自定义等待时长)
再次访问 localhost/consumer/payment/feign/timeout
发现可以正常显示内容!!!
OpenFeign日志打印功能:日志级别:
配置Bean
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
yml文件里需要开启日志的Feign客户端
logging:
level:
com.atguigu.springcloud.service.PaymentFeignService: debug
最后启动访问,就能看到后台的日志啦!!!



