Feign远程调用

RestTemplate 调用的问题

restTeplate 调用存在以下问题

  • 代码可读性差,编程体验不统一
  • 复杂URL 难以维护
1
2
3
4
5
6
@FeignClient("userService")
public interface UserClient {
    @GetMappling("/api/user/{id}")
    User findById(@PathVariable("id") String id)
        
}
1
2
3
4
5
6
@Autowired
UserClient userclient;

public Order queryOrderById(String id) {
    User user = userclient.findById(id);
}

feign自定义配置

配置 Feign 日志 可以用 java 代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public class FeignClientConfiguration{
    @Bean
    public Logger.Level feignLogLevel() {
        return Logger.Level.BASIC;
    }
}

@FeignClient(value="userservice",configuratoin=FeignClientConfiguration.class)

@EnableFeignClients(defaultConfiguration=FeignClientConfiguration.class)

Feign性能优化

  • URLConnection: 默认实现,不支持连接池
  • Apache HttpClient: 支持连接池
  • OKHttp: 支持连接池

对 Feign优化的主要包括

  • 使用连接池代替 默认的 URLConnection
  • 日志级别,最好用 basic 或者 none,日志不开的话,性能也会提高很多

Feign的最佳实践

  • 使用继承的方式来写
  • 抽取模块来写

feign的最佳实践