本文目录:
在介绍Ribbon的时候,使用了RestTemplate实现了接口调用,但该方法传入的参数只有一个,但在实际业务中,我们可能需要传入多个参数,那该怎么解决呢?Feign就是解决这个问题的。
Feign是Netflix开发的声明式、模板化的Http客户端,Spring Cloud Fegin支持Spring MVC注解,整合了Ribbon和Hystrix,我们只需要创建一个接口,并用注解的方式配置即可。
1.新建一个Spring boot 工程,添加spring-cloud-starter-feign依赖。
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-feignartifactId>
<version>LATESTversion>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-eurekaartifactId>
dependency>
2.启动类添加@EnableFeignClients注解
@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class SpringCloudFeignApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudFeignApplication.class, args);
}
}
3.创建一个Fegin接口,并添加@FeignClient注解
@FeignClient(name="string-service")
public interface UserService {
@RequestMapping("/hi")
String hello();
}
4.修改Controller类,调用接口。
@RestController
public class UserController {
@Autowired
UserService userService;
@RequestMapping("/access")
public String helloBoy(){
return userService.hello();
}
}
5.配置文件
server.port=8674
eureka.client.serviceUrl.defaultZone=http://localhost:8888/eureka/
6.启动项目,访问http://localhost:8674/access,出现如图所示界面
Feign支持继承,使用继承,可以将一些公共接口都写在父接口中。通常情况下,不建议在服务器端和客户端之间共享接口。
以post请求和get请求构造Feign的多参配置
@FeignClient(name = "string-service")
public interface UserService {
//1.最直接的方式,url有几个参数,Feign接口中就有几个参数。使用@RequestParam注解指定参数
@RequestMapping(value = "/hello1", method = RequestMethod.GET)
public String get(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName);
//2.多参数的url也可以用map来构建
@RequestMapping(value = "/hello2", method = RequestMethod.GET)
public String get(@RequestParam Map map);
}
@FeignClient(name = "string-service")
public interface UserService {
@RequestMapping(value = "/hello3", method = RequestMethod.POST)
public String get(@RequestBody String user);
}