OpenFeign服务接口调用
程序员文章站
2022-06-13 11:37:51
...
我们写过之前采用RestTempalte类进行远程服务调用,我们说它比直接HTTP方法的调用更加优美,这次我们推荐一个更方面的服务调用方法:Feign
Feign是一个声明式的web服务客户端,让编写web服务客户端变得非常容易,只需创建一个接口并在接口上添加注解即可。
既然是服务接口调用,按下面的东西必然是在服务调用方写的:
1、POM
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、YML
logging:
level:
com.atguigu.springcloud.service.PaymentFeignService: debug
3、启动类
@EnableFeignClients
4、配置类
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
5、重点!!!@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentById(@PathVariable("id") Long id);
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout();
}
指定服务名!!!
6、直接可以调用服务,啥都不用写了,通过一个注解+对应映射就可以使用服务了!!!
@RestController
public class OrderFeignController {
@Resource
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id) {
return paymentFeignService.getPaymentById(id);
}
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeignTimeout(){
return paymentFeignService.paymentFeignTimeout();
}
}
7、执行测试
可以看到成功执行,并且如果执行多次就可以发现,Feign自带负载均衡
8、OpenFeign默认等待一秒钟,超过后报错
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeignTimeout(){
try {
TimeUnit.SECONDS.sleep(3);
}catch (Exception e) {
e.printStackTrace();
}
return serverPort;
}
等待三秒,执行测试:报错!
9、在yml文件中配置客户端超时时间:
ribbon:
ReadTimeout: 5000
ConnectTimeout: 5000
然后测试,就可以发现成功了,因为在允许超时的时间内
上面的2、4是用来实现日志打印功能的,如果不需要,省略即可
全部日志信息:
下一篇: 面试题-计算机网络