OpenFeign服务接口调用
Feign是一个声明式WebService客户端。使用Feign能让编写WebService客户端更加简单,只需创建一个接口并在接口上添加注解即可。
它的使用方法是定义一个服务接口与然后在上面添加注释。Feign也支持可插拔式编码器和解码器。SpringCloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。Feign可以与Eureka和Ribbon组合使用以支持负载均衡
openFeign中也整合了Ribbon
创建一个cloud-consumer-feign-order80
写pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
写yml
server:
port: 80
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
主启动@EnableFeignClients注解
@SpringBootApplication
@EnableFeignClients
public class OrderFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderFeignMain80.class,args);
}
}
新增注解接口,写在service中,@FeignClient:
@Component
@FeignClient(value = "CLOUD-PAYMENT-SERVICE")
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}
controller层:
@RestController
@Slf4j
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);
}
}
OpenFeign的超时控制
8001写一个sleep3秒的方法,模拟超时
@GetMapping(value = "/payment/feign/timeout")
public String paymentFeinTimeout(){
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return serverPort;
}
80的service
@GetMapping(value = "/payment/feign/timeout")
String paymentFeinTimeout();
80的controller
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeinTimeout() {
return paymentFeignService.paymentFeinTimeout();
}
openFeign默认等待一秒钟,超过就报错
在yml中配置
###SpringCloud feign 默认开启支持ribbon
ribbon:
###指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间。
ReadTimeout: 5000
###指的是建立连接后从服务器读取到可用资源所用的时间。
ConnectTimeout: 5000
OpenFeign日志打印功能
- NONE:默认的,不显示任何日志
- BASIC:仅记录请求方法、URL、响应状态码及执行时间
- HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息
- FULL:除了HEADERS中定义的信息外,还有请求和响应的正文及元数据
在config中写一个配置类
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
在yml中:
logging:
level:
#feign日志以什么级别监控哪个接口
cn.huangyy.springcloud.service.PaymentFeignService: debug