欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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、执行测试

OpenFeign服务接口调用

可以看到成功执行,并且如果执行多次就可以发现,Feign自带负载均衡 

8、OpenFeign默认等待一秒钟,超过后报错

    @GetMapping(value = "/payment/feign/timeout")
    public String paymentFeignTimeout(){
        try {
            TimeUnit.SECONDS.sleep(3);
        }catch (Exception e) {
            e.printStackTrace();
        }
        return serverPort;
    }

等待三秒,执行测试:报错!

OpenFeign服务接口调用

 

9、在yml文件中配置客户端超时时间:

ribbon:
  ReadTimeout:  5000
  ConnectTimeout: 5000

然后测试,就可以发现成功了,因为在允许超时的时间内

OpenFeign服务接口调用

 

上面的2、4是用来实现日志打印功能的,如果不需要,省略即可

全部日志信息:

OpenFeign服务接口调用