【微服务】http客户端Feign

一、Fegin替代RestTemplate

RestTemplate :代码可读性差,编程体验不统一,参数复杂URL难以维护。
Feign :是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign,其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

使用Feign步骤如下:

1、引入依赖

java 复制代码
        <!--Feign的客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

2、在orderservice启动类添加注解开启Feign的功能

3、编写Feign客户端

java 复制代码
package cn.itcast.order.clients;

import cn.itcast.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient("userservice") //发送http请求时需要知道服务名称,在此指定
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

修改orderService:

java 复制代码
package cn.itcast.order.service;

import cn.itcast.order.clients.UserClient;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private UserClient userClient;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2、利用Feign远程调用
        User user = userClient.findById(order.getUserId());
        //3 封装user到order
        order.setUser(user);
        // 4.返回
        return order;
    }
/*    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //2、利用RestTemplate发送http请求,查询用户
        //2.1 url路径
        String url = "http://userservice/user/" + order.getUserId();
        //2.2 发起http请求,实现远程调用(原本返回的是json,告诉它我们要User对象类型)
        User user = restTemplate.getForObject(url, User.class);
        //3 封装user到order
        order.setUser(user);
        // 4.返回
        return order;
    }*/
}

二、自定义配置


全局生效:

三、Feign性能优化---连接池配置

Fegin添加HttpClient依赖

java 复制代码
        <!--引入HttpClient依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>
java 复制代码
feign:
  httpclient:
    enabled: true # 支持HttpClient的开关
    max-connections: 200 #最大连接数
    max-connections-per-route: 50 #单个路径的最大连接数
相关推荐
林深的林1 小时前
Http证书体系及证书加密流程(通信流程)
网络协议·http·https
白-胖-子5 小时前
深入剖析大模型在文本生成式 AI 产品架构中的核心地位
人工智能·架构
武子康5 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
Pomelo_刘金8 小时前
用 DDD 把「闹钟」需求一点点捏出来
架构·rust·领域驱动设计
Pomelo_刘金9 小时前
Clean Architecture 整洁架构:借一只闹钟讲明白「整洁架构」的来龙去脉
后端·架构·rust
碳酸的唐9 小时前
Inception网络架构:深度学习视觉模型的里程碑
网络·深度学习·架构
自由鬼9 小时前
Apache HTTP Server 2.4.49 的目录遍历漏洞CVE-2021-41773
网络协议·http·apache
Lucky高12 小时前
HTTP和HTTPS复习
网络协议·http·https
五点六六六13 小时前
前端常见的性能指标采集
前端·性能优化·架构
平凡之大路14 小时前
【企业架构】TOGAF概念之二
架构·togaf·企业架构