【微服务】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 #单个路径的最大连接数
相关推荐
2601_960567961 小时前
电商套图自动化效率的工程量化分析——从逐张生成到批量套图的架构演进
运维·架构·自动化
shiyi.十一2 小时前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
张忠琳2 小时前
【NVIDIA】 NVIDIA Container Toolkit v1.19.1 — OCI 模块超深度分析之三
云原生·容器·架构·kubernetes·nvidia
XUHUOJUN4 小时前
Azure Local VM 部署第 1 篇:Hyperconverged 路径完整实战
架构·azure local
beibeix20157 小时前
CppMicroServices 核心概念:动态服务注册与模块化系统
微服务·mitk
微三云 - 廖会灵 (私域系统开发)7 小时前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
在水一缸7 小时前
苹果AI国行版过审背后的技术架构深度解析:端侧模型与私有云计算的融合实践
人工智能·架构·云计算·技术架构·苹果ai·端侧模型·私有云计算
爱上纯净的蓝天7 小时前
具身智能架构演进:从“纸上大脑“到“落地干活“的三层架构设计
架构
Kel8 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
宇宙第一小趴菜8 小时前
五、Oracle vs MySQL 架构深度对比笔记
mysql·oracle·架构