1.2 【Feign】发起远程调用
1.2.1 Feign介绍:
Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。
1.2.2 Feign测试
1、在客户端添加依赖
<!--
Feign 远程调用的依赖1.结合http的远程调用。2.结合了ribbon的负载均衡
所以Feign代替了Ribbon和RestTemplate
-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
2、定义FeignClient接口
@FeignClient(serviceId = "2009-order")//serviceId服务编号 唯一标识
public interface OrderClient {
/**
* 此接口,与要请求的OrderController中的findOrder 权限 返回值类型 方法名 请求路径 相同,
* 最好直接复制过来,去掉方法体,最后在接口上标注@FeignClient注解
* @return
*/
@RequestMapping(value = "/order/findOrder/{id}",method = RequestMethod.GET)
public String findOrder(@PathVariable("id")Integer id);
}
3.修改启动类
Feign结合http的远程调用。
Feign结合了ribbon的负载均衡
所以Feign代替了Ribbon和RestTemplate
@SpringBootApplication
//标注当前工程是eureka的客户端
@EnableEurekaClient
//标注当前工程开启feign远程调用
@EnableFeignClients
public class SpringBootUserApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootUserApplication.class);
}
}
4.测试
@RestController
public class UserController {
@Autowired
OrderClient orderClient;
@RequestMapping(value = "/findOrder",method = RequestMethod.GET)
public String findOrder(){
String order = orderClient.findOrder(1);
return order;
}
}
Debug调试
Feign注意点
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:
1、feignClient接口 有参数在参数必须加@PathVariable(“XXX”)和@RequestParam(“XXX”)
2、feignClient返回值为复杂对象时其类型必须有无参构造函数。