文章目录
- 一、Feign实现远程调用
- 1.替换RestTemplate发起远程调用,RestTemplate存在的问题:
- 2.实现Feign远程调用:
- 二、Feign的自定义日志
- 1.Feign可修改的配置如下
- 2.方式一:配置文件方式
- 3.方式二:Java代码方式
一、Feign实现远程调用
1.替换RestTemplate发起远程调用,RestTemplate存在的问题:
代码可读性差,编程体验不统一。
参数复杂URL难以维护。
2.实现Feign远程调用:
在order-service的pom.xml配置文件中引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
在order-service的启动类添加@EnableFeignClients
注解。
在clients层中编写Feign客户端:
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
修改orderServiceImpl:
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private UserClient userClient;
/**
* 根据id查找订单
*/
@Override
public Order selectById(Long id) {
//1.查询订单
Order order = orderMapper.getById(id);
//2.利用Fein发起http请求,查询用户
User user = userClient.findById(order.getUserId());
order.setUser(user);
return order;
}
}
调用成功:
二、Feign的自定义日志
1.Feign可修改的配置如下
2.方式一:配置文件方式
全局生效:
feign:
client:
config:
default: #这里用default就是全局配置,如果是写微服务名称,则是针对某个服务
loggerLevel: #日志级别
局部生效:
feign:
client:
config:
userservice: #这里用default就是全局配置,如果是写微服务名称,则是针对某个服务
loggerLevel: #日志级别
3.方式二:Java代码方式
声明一个Bean:
public class FeignClientConfiguration {
@Bean
public Logger.Level feignLogLevel(){
return Logger.Level.BASIC;
}
}
全局配置,将这个Bean放在order-service的启动类上的@EnableFeignClients注解中:
@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
局部配置,将这个Bean放到@FeignClient这个注解中:
@FeignClient(value = "userservice",configuration = FeignClientConfiguration.class)