代码可读性差,编程体验不统一。
参数复杂URL难以维护。
在order-service的pom.xml配置文件中引入依赖:
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
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:
client:
config:
default: #这里用default就是全局配置,如果是写微服务名称,则是针对某个服务
loggerLevel: #日志级别
局部生效:
feign:
client:
config:
userservice: #这里用default就是全局配置,如果是写微服务名称,则是针对某个服务
loggerLevel: #日志级别
声明一个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)
使用连接池代替默认的URLConnection。
日志级别,最好使用basic和none。
在order-service的pom.xml中添加依赖:
<dependency>
<groupId>io.github.openfeigngroupId>
<artifactId>feign-httpclientartifactId>
denpendency>
在order-service的application.yml配置连接池:
feign:
client:
config:
default: #default全局的配置
loggerLevel: BASIC #日志级别,BASIC就是基本的请求和响应信息
httpclient:
enabled: true #开启feign对HttpClient的支持
max-connections: 200 #最大连接数
max-connections-per-route: 50 #每个路径的最大连接数