SpringCloud 学习之 Feign

学习完了如何使用restTemplate调用服务之后,再来看看如何用feign声明式服务调用。

把Feign引入

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

我用的cloud版本是比较新的,所以feign改成了openfeign,根据版本选择吧

使用Feign

跟Eureka一样,先在启动类上加上注解@EnableFeignClients

然后写个接口

1
2
3
4
5
6
7
8
9
10
@FeignClient(name = "PROVIDE")
public interface MsgClient {

@GetMapping("/msg")
String getMsg();

@PostMapping("/param")
String getMsgAndParam(@RequestParam(value = "param") String param);

}

  • @FeignClient注解调用的服务,name就是需要调用的服务的名字,不区分大小写
  • 方法上可以使用@GetMapping@PostMapping等注解来映射服务url
  • 参数可以使用@RequestParam等spring mvc使用的注解,但是value之一定要指定!

最后将接口注入到需要调用的地方就好了,比如,简单的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
public class FeignController {

@Autowired
MsgClient msgClient;

@GetMapping("/msg")
public String getMsg(){
return msgClient.getMsg();
}

@PostMapping("/param")
public String getMsgAndParam(String param){
return msgClient.getMsgAndParam(param);
}
}

虽然我觉得吧,这样好像要写两遍接口…不是更麻烦吗= =,看到了有一个教程说,Feign的接口应该由服务提供方编写,然后服务消费者来引用就好了,想想好像也就复制粘贴的事,还是没法太理解啊~

附上前篇忘记加的东西

demo 地址