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

2022年12月7日11:29:45

原因: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的最佳实践此处略。

  • 作者:讨逆猴子
  • 原文链接:https://blog.csdn.net/m0_61206788/article/details/126739328
    更新时间:2022年12月7日11:29:45 ,共 1759 字。