<学习笔记> 为什么还要使用Feign来代替RestTemplate

Feign是一个声明式的HTTP客户端,用于更优雅地实现HTTP请求。相比RestTemplate,Feign提高了代码可读性和统一编程体验,简化了复杂URL的维护。通过声明Feign客户端,可以基于SpringMVC注解声明远程调用的详细信息,使HTTP请求的发送更加简洁和直观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

黑马笔记:

RestTemplate是干什么的?

RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类。

为什么还要使用Feign来代替RestTemplate?

因为RestTemplate方式调用存在一些问题:

RestTemplate发起远程调用的代码:

 存在下面的问题:

        1.代码可读性差,编程体验不统一。

                可读性差:上面的一段代码,是一个http请求的代码,有url路径,又有复杂的请求方式,对于没有接触过远程调用的人来讲,这段代码根本看不懂。

                编程体验不统一:正常写代码都是在写方法,而这里突然冒出一个url,使得编程体验不统一。

        2.参数复杂的url难以维护

所以使用RestTemplate不够优雅,所以有了Feign。

Feign的介绍:

Feign是一个声明式的http客户端,(要实现发送http请求不好发,只需要把发请求所需要的信息声明出来,剩下的事情就不需要管了,由Feign帮你来做)其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

使用Feign的步骤如下:

编写Feign客户端:

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}")
    User findById(@PathVariable("id") Long id);
}

主要是基于SpringMVC的注解来声明远程调用的信息,比如:

        服务名称:userservice

        请求方式:GET

        请求路径:/user/{id}

        请求参数:Long id

        返回值类型:User

发一个Http请求所需要的信息都被Feign通过声明客户端的方式声明出来了。

    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;
    }

太优雅了,只需要一行代码,并且也符合学习springboot时候编写代码的习惯,先注入再调用。

<think>好的,我现在需要处理用户关于Spring Cloud的查询,特别是关于笔记、示例教程以及“巨轮”项目的相关内容。首先,用户提到的引用中,引用[1]是关于Spring Cloud Config Server的依赖配置,引用[2]详细介绍了Spring Cloud Ribbon的作用和应用,引用[3]看起来像是一段读书笔记,可能和用户的需求关联不大,但用户提到可能以“巨轮”作为项目代号,需要留意是否有相关项目名称或场景。 用户的问题主要分为两部分:寻找Spring Cloud的笔记或教程示例,以及可能与“巨轮”项目相关的内容。首先,我需要确认用户是否需要基础的Spring Cloud教程,或者特定于某个项目(如“巨轮”)的配置案例。根据引用[1]和[2],用户可能已经接触到Config Server和Ribbon,因此可能需要更深入的配置示例或整合其他Spring Cloud组件的教程。 接下来,我需要检查是否有“巨轮”这个项目在Spring Cloud的生态中被提及。可能的情况是,用户可能记错了项目名称,或者“巨轮”是某个企业内部项目的代号,因此公开资料可能有限。在这种情况下,最好提供通用的Spring Cloud项目示例,并建议用户确认项目名称或提供更多上下文。 另外,用户要求生成相关问题。根据之前的引用,问题可能涉及Config Server的配置、Ribbon的负载均衡实现,以及微服务架构中的其他组件如Eureka、Feign、Hystrix等。需要确保问题覆盖用户可能感兴趣的进阶主题,并引导他们深入理解Spring Cloud的各个模块。 最后,需要确保回答结构清晰,符合用户要求的格式,正确引用提供的参考资料,并自然地融入引用标识。同时,避免使用Markdown,保持口语化的表达,但在这里因为是内部思考过程,可以更随意一些。</think>### Spring Cloud 学习笔记与“巨轮”项目示例 根据您的需求,以下是Spring Cloud核心组件示例及可能关联“巨轮”项目的学习方向: --- #### 1. **Spring Cloud Config 配置中心示例(引用[1])** 配置中心用于集中管理微服务配置,以下为服务端基础配置: ```xml <!-- Spring Cloud Config Server依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> ``` 启用配置中心: ```java @SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } } ``` 若“巨轮”项目涉及多环境配置(如开发、测试、生产),可通过`application.yml`指定Git仓库路径实现动态加载[^1]。 --- #### 2. **Ribbon 负载均衡实现(引用[2])** Ribbon在服务调用时自动实现负载均衡,例如在RestTemplate中: ```java @Bean @LoadBalanced // 启用Ribbon public RestTemplate restTemplate() { return new RestTemplate(); } ``` 调用服务时直接使用服务名(如`user-service`)代替具体IP,Ribbon会轮询选择可用实例[^2]。若“巨轮”项目需要自定义负载策略(如权重分配),可配置`IRule`实现类。 --- #### 3. **微服务架构整合示例** 典型Spring Cloud项目包含以下组件: - **注册中心**:Eureka/Nacos(服务发现) - **网关**:Spring Cloud Gateway(路由、限流) - **容错**:Hystrix/Sentinel(熔断降级) - **链路追踪**:Sleuth + Zipkin 例如“巨轮”项目若为电商系统,可采用如下结构: ``` 巨轮项目 ├── 用户服务(Ribbon调用订单服务) ├── 订单服务(Feign声明式调用库存服务) ├── 配置中心(统一管理所有服务配置) └── API网关(鉴权、路由转发) ``` --- #### 4. 学习资料推荐 - **官方文档**:[Spring Cloud官网](https://spring.io/projects/spring-cloud) - **实战教程**:《Spring Cloud微服务实战》 - **开源项目参考**:若“巨轮”涉及分布式事务,可研究Seata框架整合案例。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值