目录:
1.OpenFeign
1.1创建feign模块
1.2超时控制
1.3日志打印
一,简单介绍一下服务调用
服务调用,指的是注册到服务端上的客户端之间数据的相互调用问题。
spring-cloud调用服务有两种方式,一种是 Ribbon+RestTemplate, 另外一种是Feign。
服务降级,指的是当服务器压力剧增时,根据当前业务情况及流量对一些服务和页面有策略的降级,
以此释放服务器资源以保证核心任务的正常运行。
二,OpenFeign
1.创建feign模块
首先,新建一个消费者募模块.feign自带负载均衡配置,所以不用手动配置.
然后,创建cloud-consumer-feign-order80
1.1.引入依赖
<dependencies>
<!-- Open Feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- eureka Client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<groupId>com.krisswen.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
1.2编写配置文件
server:
port: 80
spring:
application:
name: cloud-consumer-feign-service
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
1.3编写启动类
@SpringBootApplication
@EnableFeignClients //开启使用feign客户端的功能
public class CustomerFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(CustomerFeignMain80.class,args);
}
}
1.4编写grign客户端
@FeignClient(value = "cloud-payment-service") //标识当前接口就是一个feign客户端,并且指定调用哪一个微服务
public interface PaymentFeignService {
@GetMapping("payment/{id}")
public CommonResult<Payment> findPaymentById(@PathVariable("id") Long id);
}
1.5编写controller层
@RestController
public class CustomerFeignController {
@Autowired
PaymentFeignService paymentFeignService;
@GetMapping("consumer/feign/payment/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
return paymentFeignService.getPaymentById(id);
}
}
//localhost/consumer/feign/payment/1
1.6.测试结果
分别启动 两台eureka 7001 7002
两台服务提供方 8001 8002
启动feign客户端 cloud-consumer-feign-order80
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210120082738315.JPG#pic_center)
1.7.最终的目录为下图所示:
2.超时控制
2.1在提供方添加模拟服务超时的方法用来测试
设置需要响应的时间
@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut(){
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "time out.....";
}
2.2在feign客户端中定义超时方法
@GetMapping("/payment/feign/timeout")
public String paymentFeignTimeOut();
2.3.在controller中定义
@GetMapping("consumer/feign/timeout")
public String timeout(){
//openfeign调用服务,默认等待时间是1秒钟
return paymentFeignService.paymentFeignTimeOut();
}
2.4.进行测试,通过Feign客户端进行访问
2.4.1.首先我们直接访问服务中的paymentFeignTimeOut方法
2.4.2.然后我们直接访问feign客户端类访问
2.5.设置避免超时调用
feign:
client:
config:
default:
readTimeout: 5000
connectTimeout: 5000
ribbon: #设置Feign客户端调用超时时间
ReadTimeOut: 5000 #指的是建立连接所需要的的时间
ConnectTimeOut: 5000 #指的是建立连接之后,服务器读取资源需要的时间
3.日志打印
Feign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解Feign中Http的请求细节,就是对Feign接口的调用情况进行监控和输出。
3.1.自定义配置类
@Configuration
public class FeignConfig {
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
3.2定义配置文件的日志配置内容
logging:
level:
com.kriss.service.PaymentFeignService: debug
3.3测试结果,查看我们的打印信息