SpringCloudAlibaba全网最全讲解5️⃣之Feign(建议收藏)
创始人
2024-02-16 20:07:14
0

🌈专栏简介

    感谢阅读,希望能对你有所帮助,博文若有瑕疵请在评论区留言或在主页个人介绍中添加我私聊我,感谢每一位小伙伴不吝赐教。我是XiaoLin,既会写bug也会唱rap的男孩,这个专栏主要是介绍目前微服务最主流的解决方案,SpringCloudAlibaba,将会分组件介绍。专栏地址: SpringCloudAlibaba。

  • SpringCloudAlibaba全网最全讲解3️⃣之Ribbon(建议收藏)
  • SpringCloudAlibaba全网最全讲解3️⃣之Nacos(建议收藏)
  • SpringCloudAlibaba全网最全讲解2️⃣(建议收藏)
  • SpringCloudAlibaba全网最全讲解1️⃣(建议收藏)

七、远程调用: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的依赖。


org.springframework.cloudspring-cloud-starter-openfeign

复制代码

7.2.2、添加注解

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

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients // 支持Feign
public class ShopOrderServerApp {public static void main(String[] args) {SpringApplication.run(ShopOrderServerApp.class,args);}@Bean@LoadBalancedpublic 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

  @AutowiredProductFeignApi productFeignApi;@Overridepublic 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: 5000readTimeout: 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发送请求。

 

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...