SpringCloud学习(十一):OpenFeign的使用
在没有feign之前,我们的客户端使用的是ribbon+restTemplate。OpenFeign的使用其实就是 微服务调用接口+@FeignClient注解一、OpenFeign的简单使用一、新建模块新建普通maven工程cloud-consumer-feign-order80。二、修改pom文件<?xml version="1.0" encoding="UTF-8"?><p
·
在没有feign之前,我们的客户端使用的是ribbon+restTemplate。
OpenFeign的使用其实就是 微服务调用接口+@FeignClient注解
目录
二、在80的service和controller中分别加上这个睡眠方法
一、OpenFeign的简单使用
一、新建模块
新建普通maven工程cloud-consumer-feign-order80。
二、修改pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>cloud</artifactId>
<groupId>com.shang.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-consumer-feign-order80</artifactId>
<dependencies>
<!--openfeign-->
<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>
<!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
<dependency>
<groupId>com.shang.cloud</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--web-->
<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.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>
三、编写yml文件
server:
port: 90 #因为不想和Nginx争夺80端口,所以改成了90
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/
四、编写主启动类
@SpringBootApplication
@EnableFeignClients //激活并开启feign
public class OrderFeignMain80 {
public static void main(String[] args) {
SpringApplication.run(OrderFeignMain80.class, args);
}
}
五、编写业务代码
1、service
@Component
@FeignClient("CLOUD-PAYMENT-SERVICE") //使用feign
public interface PaymentFeignService {
@GetMapping(value = "/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id);
}
2、controller
@RestController
@Slf4j
public class OrderFeignController {
@Autowired
private PaymentFeignService paymentFeignService;
@GetMapping(value = "/consumer/payment/get/{id}")
public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id){
return paymentFeignService.getPaymentById(id);
}
}
六、启动测试
先启动7001、7002;在启动8001、8002;最后启动80
在浏览器地址栏输入:
http://localhost:90/consumer/payment/get/1
成功显示
七、OpenFeign中逻辑代码的关系
二、OpenFeign的超时控制
一、在8001的controller类中添加睡眠的方法
使服务运行时间超过1秒
/**
* 暂停3秒线程,用于测试OpenFeign的超时控制
* @return
*/
@GetMapping(value = "/payment/feign/timeout")
public String paymentTimeOut(){
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
return serverPort;
}
二、在80的service和controller中分别加上这个睡眠方法
1、service
@GetMapping(value = "payment/feign/timeout")
public String paymentFeignTimeOut();
2、controller
@GetMapping(value = "/consumer/payment/feign/timeout")
public String paymentFeignTimeOut(){
//客户端一般默认等待1秒钟,但是我们故意停顿3秒
return paymentFeignService.paymentFeignTimeOut();
}
三、运行测试
1、8001自测
先在浏览器地址栏中输入
http://localhost:8001/payment/feign/timeout
三秒后,能正常访问
2、通过80
不能正常访问
四、设置feign客户端超时控制
在80的yml中添加对应的配置
#设置feign客户端超时时间(OpenFeign默认支持ribbon)
ribbon:
#指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
ReadTimeout: 5000
#指的是建立连接后从服务器读取到可用资源所用的时间
ConnectTimeout: 5000
五、再次运行测试
五秒后,成功访问。
三、OpenFeign日志打印功能
一、配置日志bean
新增config包
@Configuration
public class FeignConfig
{
@Bean
Logger.Level feignLoggerLevel()
{
return Logger.Level.FULL;
}
}
二、在yml中开启日志的客户端
logging:
level:
# feign日志以什么级别监控哪个接口
com.atguigu.springcloud.service.PaymentFeignService: debug
更多推荐
已为社区贡献2条内容
所有评论(0)