第二天d:
Feign远程调用:
在RestTemplate中,我们遇到了以下几个问题。
1.代码可读性差,编码体验不统一。
2.参数复杂,url难以维护。
所以我们要用到Feign。
Feign的介绍:
Feign是一个声名式的HTTP客户端,,官方地址:http://github.com/OpenFeign/feign。
它的作用就是可以让我们优雅的发送http请求。
定义和使用Feign客户端:
1.在pom中加入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2.在启动类中加入注解,开启Feign功能。
@EnableFeignClients
@SpringBootApplication
public class OrderApplication{
public static void main(String args[]){
SpringApplication.run(OrderApplication.class, args);
}
}
3.编写Feign客户端:
@FeignClient("userservice")
public interface UserClient{
@GetMapping("user/{id}")
User findById(@PathVariable("id") Long id);
}
这里的几个参数:
1.服务名称:userservice
2.请求方式:GET
3.请求路径:user/{id}
4.请求参数:Long id
5.返回值:User
4.这时就可以在消费端服务直接进行调用
public class OrderService{
@Resource
private UserClient userClient;
@Resource
private OrderMapper ordermapper;
public Order queryOrderById(Long orderId){
//1.查询订单。
Order order = orderMapper.getById(orderId);
//2.远程调用。
User user = userClient.findById(order.getUserId);
//3.封装order
order.setUser(user);
//4.返回order
return order;
}
注:Feign也已经默认有负载均衡的功能。(ribbon)
自定义Feign配置:
Feign运行自定义配置来覆盖默认配置,可以修改以下配置。
一般使用的配置都是日志级别的。
自定义配置:
1.方法一:配置文件方式:
全局生效:
feign:
client:
config:
default: #这里的default就是全局注册,如果是写服务名称,则是对某个微服务的配置。
loggingLevel:FULL#日志级别
局部生效:
feign:
client:
config:
userService:
LoggingLevel:FULL #日志级别
2.方法2:
1.编写Java代码,先编写一个Bean:
public class FeignClientConfiguration{
@Bean
public Logger.Level feignLogLevel(){
return logger.level.BASIC;
}
}
2.如果是全局注册:放在@EnableFeignClients:
@EnableFeignClients(defaultCongiguration = FeignClientConfiguration.class)
3.如果是局部注册:放在@FeignClient:
@FeignClient(Value ="userservice",configuration = FeignClientConfiguration.class)
这里仅仅对日志进行了配置改变!如果对其他配置要进行改变,同理!