SpringCloudAlibaba全网最全讲解5️⃣之Feign(建议收藏)

简介: Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。

七、远程调用:Feign


7.1、Feign简介


   Feign是Spring Cloud提供的一个声明式的伪Http客户端, 它使得调用远程服务就像调用本地服务一样简单, 只需要创建一个接口并添加一个注解即可。


   Nacos很好的兼容了Feign, Feign默认集成了 Ribbon, 所以在Nacos下使用Fegin默认就实现了负载均衡的效果。


7.2、Feign实战


7.2.1、添加依赖


   在shop-order-server项目的pom文件加入Fegin的依赖。


<!--fegin组件-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
复制代码


7.2.2、添加注解


   我们需要在启动类上添加@EnableFeignClients注解,只有有了这个注解才会扫描。


@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 支持Feign
public class ShopOrderServerApp {
  public static void main(String[] args) {
    SpringApplication.run(ShopOrderServerApp.class,args);
  }
  @Bean
  @LoadBalanced
  public RestTemplate getInstance(){
    return new RestTemplate();
  }
}
复制代码


7.2.3、新增ProductFeignApi


   在Shop-order-server中新增一个接口。


// name指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
@FeignClient(name = "product-service")
public interface ProductFeignApi {
  @RequestMapping("/product")
  Product findById(@RequestParam("productId") Long productId);
}
复制代码


7.2.4、修改Controller


@Autowired
  ProductFeignApi productFeignApi;
  @Override
  public Order getById(Long oid, Long pid) {
    Product product = productFeignApi.findById(pid);
    Order order = orderDao.getOne(oid);
    order.setPname(product.getPname());
    return order;
  }
复制代码


7.3、Feign的重要属性


   我们可以配置超时属性。


feign:
  client:
    config:
      default:
        connectTimeout: 5000
        readTimeout: 5000
复制代码


7.4、Feign实现原理


  1. 启动后会会根据配置在启动类上的@SpringBootApplication去扫描贴了@FeignClient注解的类,并为其创建代理对象。
  2. 通过反射拿到代理类实现的接口:ProductFeignApi。
  3. 通过反射拿到接口上注解并且将注解中心的name属性拿出来:product-service。
  4. 通过反射拿到接口中的方法,并且拿到接口中方法上的注解@RequestMapping,并且把值拿出来:/product。
  5. 将方法中参数注解中的值也拿出来,这个是我们传进来的参数:productId。
  6. 拼接出路径:http://product-service/product?productId=1。
  7. 根据本地的服务清单去找对应的节点信息。
  8. 根据你配置的ribbon负载均衡策略去选择节点。
  9. 将product-service替换成对应的节点信息和端口。
  10. 使用RestTemplate发送请求。


相关文章
|
3月前
|
前端开发 安全 JavaScript
SpringBoot 如何解决跨域问题?
本文深入探讨了Spring Boot解决跨域问题的方法,包括全局配置CORS、使用@CrossOrigin注解和自定义过滤器,提供了详细的代码示例和分析,帮助开发者有效应对Web开发中的跨域挑战。
140 4
|
9月前
【十九】搭建SpringCloud项目三(Feign)
【十九】搭建SpringCloud项目三(Feign)
81 0
|
消息中间件 Java 微服务
还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!
还在用 OpenFeign?来试试 SpringBoot3 中的这个新玩意!
1619 0
|
Java Maven 微服务
SpringCloud学习(十一):OpenFeign的使用
在没有feign之前,我们的客户端使用的是ribbon+restTemplate。 OpenFeign的使用其实就是 微服务调用接口+@FeignClient注解
232 0
SpringCloud学习(十一):OpenFeign的使用
|
Java 测试技术 容器
全网最详细的介绍SpringBoot启动过程源码分析
上一篇我们介绍了SpringBoot的自动装配的知识,这一篇我们将介绍SpringBoot最核心的知识点,SpringBoot应用的启动过程。这个启动过程比较复杂,在此我只介绍核心的知识点。其启动过程大概分为两步。1. 初始化SpringApplication对象,2.执行SpringApplication对象的run方法。
169 0
全网最详细的介绍SpringBoot启动过程源码分析
|
负载均衡 监控 安全
SpringCloudAlibaba全网最全讲解7️⃣之Gateway(建议收藏)
网关就是为了解决这些问题而生的。所谓的API网关,就是指系统的统一入口,它封装了应用程序的内部结构,为客户端提供统一服务,一些与业务本身功能无关的公共逻辑可以在这里实现,诸如认证、鉴权、监控、路由转发等等。
2184 0
SpringCloudAlibaba全网最全讲解7️⃣之Gateway(建议收藏)
|
存储 缓存 SpringCloudAlibaba
SpringCloudAlibaba全网最全讲解3️⃣之Nacos(建议收藏)
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
350 1
SpringCloudAlibaba全网最全讲解3️⃣之Nacos(建议收藏)
|
SpringCloudAlibaba 负载均衡 算法
SpringCloudAlibaba全网最全讲解4️⃣之Ribbon(建议收藏)
负载均衡就是将负载(工作任务,访问请求)进行分摊到多个操作单元(服务器,组件)上进行执行。 根据负载均衡发生位置的不同,一般分为服务端负载均衡和客户端负载均衡
399 0
SpringCloudAlibaba全网最全讲解4️⃣之Ribbon(建议收藏)
|
SpringCloudAlibaba 监控 Dubbo
SpringCloudAlibaba全网最全讲解6️⃣之Sentinel(建议收藏)
在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此时若有大量的网络涌入,会形成任务堆积,最终导致服务瘫痪。
494 0
SpringCloudAlibaba全网最全讲解6️⃣之Sentinel(建议收藏)
|
存储 SpringCloudAlibaba 监控
SpringCloudAlibaba全网最全讲解8️⃣之Sleuth和Zipkin(建议收藏)
在大型系统的微服务化构建中,一个系统被拆分成了许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。
608 0
SpringCloudAlibaba全网最全讲解8️⃣之Sleuth和Zipkin(建议收藏)