黑马笔记:
RestTemplate是干什么的?
RestTemplate提供了多种便捷访问远程Http服务的方法,是一种简单便捷的访问restful服务模板类。
为什么还要使用Feign来代替RestTemplate?
因为RestTemplate方式调用存在一些问题:
RestTemplate发起远程调用的代码:
存在下面的问题:
1.代码可读性差,编程体验不统一。
可读性差:上面的一段代码,是一个http请求的代码,有url路径,又有复杂的请求方式,对于没有接触过远程调用的人来讲,这段代码根本看不懂。
编程体验不统一:正常写代码都是在写方法,而这里突然冒出一个url,使得编程体验不统一。
2.参数复杂的url难以维护
所以使用RestTemplate不够优雅,所以有了Feign。
Feign的介绍:
Feign是一个声明式的http客户端,(要实现发送http请求不好发,只需要把发请求所需要的信息声明出来,剩下的事情就不需要管了,由Feign帮你来做)其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
使用Feign的步骤如下:
编写Feign客户端:
@FeignClient("userservice")
public interface UserClient {
@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}
主要是基于SpringMVC的注解来声明远程调用的信息,比如:
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User
发一个Http请求所需要的信息都被Feign通过声明客户端的方式声明出来了。
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
// 2.用Feign远程调用
User user = userClient.findById(order.getUserId());
// 3.封装user到order
order.setUser(user);
// 4.返回
return order;
}
太优雅了,只需要一行代码,并且也符合学习springboot时候编写代码的习惯,先注入再调用。