<<Spring Cloud与Docker微服务架构实战>>书中有下面两段描述:
- Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,例如轮询、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可以自动从Eureka Server获取服务提供者地址列表,请求其中一个服务提供者实例。
- Feign是Netflix开发的声明式、模块化的HTTP客户端。Feign可以帮助我们更加便捷、优雅地调用HTTP API。在Spring Cloud中,使用Feign是非常简单的----创建一个接口,并在接口上添加一些注解,代码就完成了。同时Spring Cloud对Feign进行了增强,使Feign支持Spring MVC注解,并整合了Ribbon与Eureka,从而让Feign的使用更加方便。
其实对于程序员来讲还是代码来的更加实在一些,上段代码比较马上明白上述描述啥意思。
代码区别:
Ribbon写法:
@RestController
public class DeptController {
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id) {
return restTemplate.getForObject("http://microservice-cousumer" + "/dept/get/" + id, Dept.class);
}
}
Feign写法:
@RestController
public class DeptController {
@Autowired
private DeptService deptService;
@RequestMapping(value = "getById/{id}")
public Dept get(@PathVariable("id") Long id) {
return deptService.getById(id);
}
}
@FeignClient(value = "${microservice-cousumer}")
public interface DeptService {
@GetMapping(value = "/consumer/dept/get/{id}")
public Dept findById(@PathVariable("id") Long id);
}
通过代码对比其实可以更好的感觉到Feign书写要比Ribbon更加简洁,不需要知道知道具体使用注册列表服务名称,只需要注入类似DeptService服务提供接口。而且也不需要像Ribbon那样参数拼接,假如参数很多,拼接是很麻烦的。而且后期维护也会变得很麻烦。
哪里有不对的地方希望大家指出,共同学习一起进步!