feign实现微服务之间的远程调用

原因:RestTemplate存在代码可读性差,编程体验不统一,参数复杂URL难以维护等缺点,因此可以用Feign替代RestTemplate实现微服务之间的远程调用。步骤如下:

1.在需要远程调用的微服务的pom文件中增加feign的依赖。

<dependency>     <groupId>org.springframework.cloud</groupId>     <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>

2.在启动类上添加注解开启Feign的功能。@EnableFeignClients//开启feign的功能

3.编写Feign的客户端(注意是接口)例子如下

@FeignClient("userservice") //被调用服务名 public interface UserClient {     @GetMapping("/user/{id}")     User findById(@PathVariable("id") Long id);//被调用的方法 }

4.测试在测试类中自动注入编写的接口

@Service public class OrderService {      @Autowired     private OrderMapper orderMapper;     @Autowired     private RestTemplate restTemplate;     @Autowired     private UserClient userClient;//编写的Feign接口      public Order queryOrderById(Long orderId) {         // 1.查询订单         Order order = orderMapper.findById(orderId);         //第一种方式:用restTemplate实现,代码编写不规范 /*        String url="http://localhost:8081/user/"+order.getUserId();         User user = restTemplate.getForObject(url, User.class);*/         //第二种方式:用feign实现远程调用是常用的方式         User user = userClient.findById(order.getUserId());         order.setUser(user);         // 4.返回         return order;     }

5.Feign的简单调用已经完成。总结一下:先引入依赖、启动类加上注解添加@EnableFeignClients注解 ,编写FeignClient接口 ,使用FeignClient中定义的方法代替RestTemplate。

注意点:feign支持自定义配置

1.修改配置文件yml文件可以更改feign的日志级别。例如:

feign:     client:     config:        default: # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置         loggerLevel: FULL #  日志级别

也可以用代码方式更改日志级别此处省略。

以上是feign的简单使用,底层发起的http请求时默认的URLConnection,不支持连接池,为了提高性能应该用连接池代替默认的URLConnection。本文用Apache的HttpClient来演示。以下是步骤

1.调用者的pom文件中引入依赖

        <!--httpClient的依赖 -->         <dependency>             <groupId>io.github.openfeign</groupId>             <artifactId>feign-httpclient</artifactId>         </dependency>

2.yml文件中修改feign的配置

# 修改feign的日志级别 feign:   client:     config:       default: # default全局的配置         loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息 # 开启feign对HttpClient的支持           httpclient:     enabled: true # 开启feign对HttpClient的支持     max-connections: 200 # 最大的连接数     max-connections-per-route: 50 # 每个路径的最大连接数

3.结束,feign的最佳实践此处略。