第十三节--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 .开启服务调用即可查看日志
posted @ 2020-09-16 22:29  hexu_blog  阅读(365)  评论(0编辑  收藏  举报