当前位置: 首页 > article >正文

SpringCloud面试题----.Ribbon和Feign调用服务的区别

角色与定位

  • Ribbon:主要是一个客户端负载均衡器,它可以在客户端实现对多个服务实例的负载均衡调用。Ribbon 会从服务注册中心获取服务实例列表,然后根据一定的负载均衡算法,选择一个合适的服务实例来发送请求。
  • Feign:是一个声明式的 Web 服务客户端,它的主要作用是让编写 Web 服务客户端变得更加容易。它通过注解和接口的方式来定义服务调用,将服务调用封装成了方法调用,使代码更加直观和易于维护,同时也集成了 Ribbon 的负载均衡功能。

调用方式

  • Ribbon:通常需要在代码中显式地使用 RestTemplate 等工具,并结合 Ribbon 的负载均衡逻辑来实现服务调用。例如,使用 RestTemplate 发送 HTTP 请求,并通过 Ribbon 的 ILoadBalancer 选择具体的服务实例。
@Autowired
private RestTemplate restTemplate;
@Autowired
private ILoadBalancer loadBalancer;
public String callService() {
    ServiceInstance instance = loadBalancer.chooseServer("service-provider");
    String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/api/hello";
    return restTemplate.getForObject(url, String.class);
}
  • Feign:通过创建接口并在接口方法上使用注解来定义服务调用,调用方式更像是本地方法调用,更加简洁和直观。
@FeignClient("service-provider")
public interface HelloService {
    @GetMapping("/api/hello")
    String sayHello();
}

在其他地方只需注入HelloService接口,就可以直接调用sayHello方法来实现服务调用。

功能特性

  • Ribbon:主要专注于负载均衡功能,提供了多种负载均衡算法,如轮询、随机、加权轮询等。用户可以根据实际需求自定义负载均衡算法。
  • Feign:除了集成了 Ribbon 的负载均衡功能外,还支持请求压缩、响应缓存、声明式的请求拦截等功能。并且 Feign 对 HTTP 请求和响应的处理更加友好,支持更多的 HTTP 方法和请求参数的处理方式。

集成与配置

  • Ribbon:可以与多种客户端工具(如 RestTemplate)集成使用,配置相对较为灵活,可以通过配置文件来指定负载均衡算法、服务实例列表等信息。
  • Feign:与 Spring Cloud 的集成更加紧密,配置相对简单。通常只需要在启动类上添加@EnableFeignClients注解,然后在接口上使用@FeignClient注解即可完成基本配置。

适用场景

  • Ribbon :适用于对负载均衡功能有高度定制化需求,或者需要与其他非 Feign 的客户端工具一起使用的场景。比如,在一些复杂的微服务架构中,可能部分服务调用需要使用特定的客户端工具,此时可以使用 Ribbon 来实现负载均衡。
  • Feign:适用于注重代码可读性和简洁性,希望以声明式的方式来定义和调用服务的场景。特别是在微服务之间的调用较为频繁,且需要对 HTTP 请求进行统一处理和管理的情况下,Feign 能发挥更大的优势。

http://www.kler.cn/a/540351.html

相关文章:

  • 12.翻转、对称二叉树,二叉树的深度
  • 『Apisix进阶篇』结合Consul作服务发现实战演练
  • 【报错解决】MySQL报错:sql_mode=only_full_group_by
  • XILINX硬件设计-(1)LVDS接口总结
  • 【分布式理论8】分布式调用之:四种IO模型
  • Android双屏异显Presentation接口使用说明
  • PDF翻译自动化:利用Make打造反思翻译工作流
  • Blazor-<select>
  • 六年级写景作文:美丽的春天
  • 重庆市大数据局:基于可信数据空间的公共数据流通利用(附下载)
  • Lua限流器的3种写法
  • 碳纤维复合材料制造的六西格玛管理实践:破解高端制造良率困局的实战密码
  • 动量+均线组合策略关键点
  • 后端开发ThreadLocal简介
  • LeetCode 热题 100 | 链表
  • 富芮坤FR8003硬件:VDDIO供电有工作不正常的情况从VBAT供电正常
  • 设计模式学习(四)
  • 腾讯通RTX国产化升级迁移指南,兼容银行麒麟、统信等系统
  • WPS如何接入DeepSeek(通过第三方工具)
  • 【shellbash进阶系列】(一)SHELL脚本--简介
  • C#、.Net 中级高级架构管理面试题杂烩
  • 【详细版】DETR网络学习笔记(2020 ECCV)
  • C++模板编程——typelist的实现
  • 算法-动态规划-0-1背包问题(二维0-1背包,背包求方案数,求背包具体方案)
  • ollama下载很慢,如何换源,如何加速下载?
  • 网络编程 day3