使用OpenFeign
1.1 配置pom.xml,导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<exclusions>
<exclusion>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
</exclusion>
<exclusion>
<artifactId>archaius-core</artifactId>
<groupId>com.netflix.archaius</groupId>
</exclusion>
<exclusion>
<artifactId>spring-cloud-netflix-ribbon</artifactId>
<groupId>org.springframework.cloud</groupId>
</exclusion>
</exclusions>
</dependency>
这里简单介绍一下maven的exclusions标签:排除因当前依赖而间接引入的某个依赖
为什么要这样做?
在写pom的时候,我们写的一个依赖往往会依赖于其他的包,而这些包可能是过时的不安全的或者我们不需要的,因此需要排除并重新引用安全的版本,先在依赖这个项目的pom中去除想排除的依赖,再添加指定版本的依赖。
如果有这样的依赖关系:projectA->projectB->projectC,但是projectA不依赖projectC,那么应该怎么做呢?
在projectA中的pom.xml中添加如下配置:
<dependency>
<!-- projectA依赖projectB -->
<groupId>example.ProjectB</groupId>
<artifactId>ProjectB</artifactId>
<version>2.0</version>
<!-- 排除projectA对projectC的依赖 -->
<exclusions>
<exclusion>
<groupId>example.ProjectC</groupId>
<artifactId>ProjectC</artifactId>
</exclusion>
</exclusions>
</dependency>
1.2服务消费者主启动类加上注解@EnableFeignClients注解,对应到我们这里是video的主启动类
@EnableFeignClients申明该项目是Feign客户端,扫描对应的FeignClient。
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class ScoreApplication {
public static void main(String[] args) {
SpringApplication.run(ScoreApplication.class,args);
}
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
1.3 新增提供者API接口并添加@FeignClient注解
我们需要集中化管理API,就可以通过接口统一管理,需要新增添加积分接口AddScoreFeignApi,其实可以简单理解成把之前我们写好的接口抽象出API,方便大家调用,在调用时引入相应API即可;
并添加@FeignClient(value = "video")注解,其中name/value就是我们要访问的微服务的名称。addScore方法中@GetMapping("/addScore/videoAddScore")是该服务提供者的接口路径。
@FeignClient(value = "score",fallback = AddScoreFeignHystrix.class)
public interface AddScoreFeignApi {
@GetMapping("/score/addScore")
public selectCommentOpenFeign(@RequestParam("videoId") String videoId);
}
与此同时,我们也要给服务提供者score-api添加OpenFeign的依赖
<!--openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1.4服务消费者调用服务提供者提供的api
首先,需要在服务消费者score的pom.xml文件中引入服务提供者的api video-api依赖
<!--调用其他服务的feign-->
<dependency>
<groupId>com.tfjybj</groupId>
<artifactId>video-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
调用服务提供者的api
public class ScoreServiceImpl {
@Autowired
//调用其他服务时,直接通过@Autowired注解注入OpenFeign接口对象就可以像调用本地方法一样调用远程服务。
private selectCommentOpenFeign feignApi;
// 测试Feign
public int test(String videoId) {
Boolean Result = feignApi.selectComment(videoId);
return Result;
}
}
OK,完成!