SpringCloud Feign使用
Posted 下雨天
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud Feign使用相关的知识,希望对你有一定的参考价值。
一,Feign简介
Feign是Netflix开发的⼀个轻量级RESTful的HTTP服务客户端(⽤它来发起请求,远程调⽤的),是以Java接⼝注解的⽅式调⽤Http请求,⽽不⽤像Java中通过封装HTTP请求报⽂的⽅式直接调⽤,Feign被⼴泛应⽤在Spring Cloud 的解决⽅案中。类似于Dubbo,服务消费者拿到服务提供者的接⼝,然后像调⽤本地接⼝⽅法⼀样去调⽤,实际发出的是远程的请求。
Feign可帮助我们更加便捷,优雅的调⽤HTTP API:不需要我们去拼接url然后调⽤restTemplate的api,在SpringCloud中,使⽤Feign⾮常简单,创建⼀个接⼝(在消费者–服务调⽤⽅这⼀端),并在接⼝上添加⼀些注解,代码就完成了。
SpringCloud对Feign进⾏了增强,使Feign⽀持了SpringMVC注解(OpenFeign),本质:封装了Http调⽤流程,更符合⾯向接⼝化的编程习惯,类似于Dubbo的服务调⽤,Dubbo的调⽤⽅式其实就是很好的⾯向接⼝编程。
二,Feign配置应用
1,服务消费者⼯程中引⼊Feign依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>
2,服务消费者⼯程启动类使⽤注解@EnableFeignClients添加Feign⽀持
@SpringBootApplication @EnableDiscoveryClient //开启服务发现,注册到注册中心 @EnableFeignClients("com.lagou.edu") //实现远程调用,指定远程包 public class FrontApplication public static void main(String[] args) SpringApplication.run(FrontApplication.class,args);
注意:此时去掉Hystrix熔断的⽀持注解@EnableCircuitBreaker即可包括引⼊的
依赖,因为Feign会⾃动引⼊。Feign = RestTemplate+Ribbon+Hystrix
3,创建Feign接⼝
name:调⽤的服务名称,和服务提供者yml⽂件中spring.application.name保持⼀致 path: 定义当前FeignClient的统一前缀 @FeignClient(name = "edu-ad-boot",path = "/ad") public interface AdRemoteService 调用请求路径 @GetMapping("/space/getAllSpace") List<PromotionSpaceDTO> getAllSpace(); @GetMapping("/space/getSpaceById/spaceId") PromotionSpaceDTO getSpaceById(@PathVariable(value = "spaceId") int id);
服务提供者信息:
注意:
1)@FeignClient注解的name属性⽤于指定要调⽤的服务提供者名称,和服务
提供者yml⽂件中spring.application.name保持⼀致
2)接⼝中的接⼝⽅法,就好⽐是远程服务提供者Controller中的Hander⽅法
(只不过如同本地调⽤了),那么在进⾏参数绑定的时,可以使⽤
@PathVariable、@RequestParam、@RequestHeader等,这也是OpenFeign
对SpringMVC注解的⽀持,但是需要注意value必须设置,否则会抛出异常
4,调用接口,测试时候可以调用成功
@RestController @RequestMapping("/ad") public class AdController @Autowired private AdRemoteService adRemoteService; @RequestMapping("/space/getAllSpace") public ResponseDTO getAllSpace() List<PromotionSpaceDTO> allSpace = adRemoteService.getAllSpace(); return ResponseDTO.success(allSpace);
5,整个测试项目结构
impl是实现,api是接口供外部调用。impl的controller中方法定义完后,在api中定义对应接口,然后执行install打一个jar包引入impl中,impl定义一个remote文件夹处理远程调用,实现远程调用接口,新起一个boss项目,加入远程调用feign的依赖,加入api的依赖。直接调用api接口路径配置保持一致,调用测试成功。
以上是关于SpringCloud Feign使用的主要内容,如果未能解决你的问题,请参考以下文章
springcloud学习2:使用feign进行微服务之间的调用