2.Openfeign注册服务内部调用
作者:互联网
1.在搭建完成服务注册中心和注册服务后,服务消费项目pom.xml加入feign依赖
<!--eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.服务消费项目配置文件application.yml加服务信息配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8001/eureka/ #注册中心地址
#与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址,默认是http://localhost:800#1/eureka;多个地址可用,分隔
3.项目启动类添加
@EnableDiscoveryClient
@EnableFeignClients 注解
@SpringBootApplication
@EnableDiscoveryClient//开启发现服务功能
public class ServiceConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceConsumerApplication.class, args);
}
}
4.创建Feign接口类
//@FeignClient注解用于指定从哪个服务中调用功能
//这里的value 对应调用服务的spring.applicatoin.name
@Component
@FeignClient(value = "service-provider")
public interface UserServiceClient {
/**
* 查找用户列表
*/
@PostMapping("/user/getUserList") //对应被调用服务的mapping
ResultEntity getUserList(@RequestBody Map<String, Object> body);
}
5.feign接口调用
@Autowired
private UserServiceClient userServiceClient;
@PostMapping("/getUserList")
public ResultEntity getUserList(@RequestBody Map<String, Object> body) {
ResultEntity userList = userServiceClient.getUserList(body);
return userList;
}
在使用Feign的时候,要注意使用requestBody,应该使用@PostMapping
1、执行流程
总到来说,Feign的源码实现的过程如下:
(1)首先通过@EnableFeignCleints注解开启FeignCleint
(2)根据Feign的规则实现接口,并加@FeignCleint注解
(3)程序启动后,会进行包扫描,扫描所有的@ FeignCleint的注解的类,并将这些信息注入到ioc容器中。
(4)当接口的方法被调用,通过jdk的代理,来生成具体的RequesTemplate
(5)RequesTemplate在生成Request
(6)Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
(7)最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡。
2、Feign和Ribbon比较优点
(1) feign本身里面就包含有了ribbon,只是对于ribbon进行进一步封装
(2) feign自身是一个声明式的伪http客户端,写起来更加思路清晰和方便
(3) fegin是一个采用基于接口的注解的编程方式,更加简便
6.openFeign接口超时控制
openFeign默认客户端一般1s,超时报错
yml配置下列即可解决
ribbon:
#指的是建立连接所用的时间,适用于网络状态正常的情况,两端连接所用的时间
ReadTimeout: 5000
#指的是建立链接后从服务读取到可用资源所用的时间
ConnectTimeout: 5000
7.openFeign日志增强
config包添加FeignConfig
import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Component
public class FeignConfig {
/**
*级别:
* NONE,
* BASIC,
* HEADERS,
* FULL
*/
@Bean
Logger.Level feignLoggerLevel(){
return Logger.Level.FULL;
}
}
yml配置添加
logging:
level:
#feign 日志以什么级别监控哪个接口(ProviderOneClient:Feign 接口包全路径)
com.douyu.serviceconsumer.feignclient.ProviderOneClient: debug
# com.douyu.serviceconsumer.feignclient: debug #或者到包级别
标签:Feign,调用,服务,getUserList,Openfeign,feign,接口,注册,public 来源: https://blog.csdn.net/huangchong0107/article/details/114495362