文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java Ribbon与openfeign区别和用法讲解

2022-11-13 13:51

关注

Ribbon 本地负载均衡器

在SpringCloud第一代中使用Ribbon、SpringCloud第二代中直接采用自研发 loadbalancer 即可,默认使用的Ribbon。

本地负载均衡与Nginx 的区别

本地负载均衡器基本的概念:我们的消费者服务从我们的注册中心获取到集群地址列表,缓存到本地,让后本地采用负载均衡策略(轮训、随机、权重、hash一致性等),获取接口列表地址,采用算法获取选择一个接口地址实现本地的rpc远程的。本地负载均衡器是从注册中心获取到集群地址列表,本地实现负载均衡算法,既本地负载均衡器。

Nginx是客户端所有的请求统一都交给我们的Nginx处理,让后在由Nginx实现负载均衡转发,属于服务器端负载均衡器。

应用场景:

Nginx属于服务器负载均衡,应用于Tomcat/Jetty服务器等,而我们的本地负载均衡器,属于客户端负载均衡,应用于在微服务架构中rpc框架中,rest、openfeign、dubbo。

基本使用

注入 restTemplate,加上 @LoadBalanced 注解。

@Bean("restTemplate")
@LoadBalanced // 实现本地的负载均衡
public RestTemplate restTemplate(){
    return new RestTemplate();
}

请求路径上可以换成服务的名称

@RequestMapping("/orderToMember")
public String orderToMember() {
     // 使用本地rest形式实现rpc调用
     String result = restTemplate.getForObject("http://kaico-member/getUser", String.class);
     return "订单调用会员获取结果:" + result;
 }

使用 loadBalancerClient 实现负载均衡

@RequestMapping("/orderToMember")
public String orderToMember() {
    // 使用本地rest形式实现rpc调用
    ServiceInstance choose = loadBalancerClient.choose("kaico-member");
    return "获取结果:" + choose;
}

原理分析

ServiceInstance choose = loadBalancerClient.choose(“kaico-member”); 从这行代码分析,

客户端负载均衡器源码:

根据serviceId获取服务

可以支持的算法:默认是轮训

openfeign

openFeign是一个Web声明式的Http客户端调用工具,提供接口和注解形式调用。

openfeign客户端作用:是一个Web声明式的Http客户端远程远程调用工具,底层是封装 HttpClient 技术。

openfeign属于 SpringCloud 自己研发,而 feign 是 netflix 研发的。

基本使用

提供服务方

接口

public interface MenberService {
    
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Long userId);
}

接口的实现类

@RestController
public class MenberServiceImpl  implements MenberService {
    @Value("${server.port}")
    private String serverPort;
    @Override
    public String getUser(Long userId) {
        return "我是会员服务端口号为:" + serverPort;
    }
}

此时,服务方提供的接口已经准备好了

接下来编写接口调用方的代码:

1、引入maven 依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>

2、启动类上开启openfeign 注解:@EnableFeignClients

3、编写 feignClient 接口

@FeignClient(name = "kaico-member")
public interface MenberServiceFeign{
    
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Long userId);
}

4、直接调用 MenberServiceFeign 接口的方法

@Autowired
private MenberServiceFeign menberServiceFeign;
@RequestMapping("/orderToMember")
public String orderToMember() {
    //测试openfeign 调用接口
    String user = menberServiceFeign.getUser(1L);
    return "获取结果:" + user;
}

总结:调用方在编写feignClient 接口代码时,只要方法代码和注解和提供方法接口代码一致即可,不要求类的全路径名称一致。然后在接口类上加上注解@FeignClient(name = “kaico-member”)并指定服务名称。openfeign默认是支持负载均衡:轮训算法(ribbon)

微服务的服务名称不能有下划线。

到此这篇关于Java Ribbon与openfeign区别和用法讲解的文章就介绍到这了,更多相关Java Ribbon与openfeign内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯