【微服务】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 #单个路径的最大连接数
相关推荐
颜料_vic5 小时前
coze中OpenClaw入门教程:“龙虾”的概念和架构解析
架构
小二·5 小时前
深入理解 MCP 协议:原理、架构与实战开发指南
架构
DLYSB_5 小时前
混合云与工业边缘场景下“云原生告警与物理现场声光”的集成架构实践
云原生·架构·报警灯
夜勤月5 小时前
VMware Workstation Pro 26H1正式版实测:全64位架构重构+免费商用,这些升级直接影响开发效率
重构·架构
小马哥编程5 小时前
【软考架构】架构评估方法-SAAM、ATAM、CBAM 和 SAEM的区别
架构
吴佳浩 Alben5 小时前
Agent 怎么做自动化评测?构建端到端的 Agent Evaluation 体系
人工智能·语言模型·架构·自动化·ai编程
姚不倒5 小时前
etcd 学习系列(二):集群架构 —— 3 节点是如何工作的
运维·架构·etcd
Dawson Zhu6 小时前
从单体到联邦:多Agent架构的必要性与设计哲学
人工智能·语言模型·架构·aigc·agi
千里马-horse6 小时前
第 60 章 模拟器架构
架构·aosp
水巷石子6 小时前
备考系统架构设计师第一天
学习·架构·软考·设计·考试