第十三节--OpenFeign服务接口调用
1 .Feign是什么?
Feign是一个声明式WebService客户端。使用Feign能让编写web service客户端更加简单。
2 .如何使用?
定义一个服务接口然后在上面添加注解。
3 .已经有Ribbon负载均衡和Rest风格调用服务了,还需要Feign干什么?
Feign旨在使编写Java Http客户端变得更容易
现在的Feign已经被OpenFeign替代:他们直接的区别
OpenFeign服务调用
第一步:新建客户端工程cloud-consumer-openfeign-order80,在pom.xml中加入依赖
<!--整合openfeign--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
第二步:在主启动类上标明使用启动使用feign
@EnableFeignClients
第三步:在cloud-consumer-openfeign-order80工程上写一个service层,里面是接口方法,和提供者controller层方法一致,在第一季讲的时候接口是放在api工程中,service层代码
@Component @FeignClient(value = "cloud-payment-service") //指定为服务名称 public interface OrderService { @PostMapping("/admin/addPayment") public CommonResult addPayment(@RequestBody Payment payment); @GetMapping("/admin/findPaymentById/{id}") public CommonResult findPaymentById(@PathVariable("id")Long id); @GetMapping("/admin/findPaymentList") public CommonResult findPaymentList(); }
第四步:controller层
@Autowired private OrderService orderService; @PostMapping("/consumer/addPayment") public CommonResult addPayment(Payment payment){ return orderService.addPayment(payment); } @GetMapping("/consumer/findPaymentById/{id}") public CommonResult findPaymentById(@PathVariable("id")Long id){ log.info("消费端查找数据"); return orderService.findPaymentById(id); } //使用getForEntity @GetMapping("/consumer/findPaymentList") public CommonResult findPaymentList(){ log.info("查询所有数据"); return orderService.findPaymentList(); }
测试:启动eureka7001,7002,提供者8001,8002,再启动消费者openfeign80,测试服务调用,负载均衡
默认的负载均衡为轮询
OpenFeign超时控制
客户端默认是1秒钟,等待超过1秒就报错,这是就需要我们配置客户端超时控制
在没加配置之前,在提供者方方法中加入线程睡眠3秒即可测试
在yml配置文件中
#设置feign客户端超时时间 ribbon: #指建立连接所用的时间 适用与网络正常情况下 两端连接所用时间 ReadTimeout: 5000 #建立连接之后服务器所读取资源所用时间 ConnectionTimeout: 5000
OpenFeign日志打印功能
Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http请求的细节
说白了就是对Feign接口的调用情况进行监控和输出
如何配置?
1 .在fein工程下编写一个配置类,导入的Logger是feign中的log
import feign.Logger; @Configuration public class LogConfig { @Bean public Logger.Level feignLogLever(){ return Logger.Level.FULL; } }
2 .yml文件中增加
logging:
level:
com.hx.service.OrderService: debug #feign日志已什么级别监控那个接口 这里以debug级别
3 .开启服务调用即可查看日志