1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪

这篇具有很好参考价值的文章主要介绍了1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇继先前发布的1.2 eureka注册中心,完成服务注册的内容

目录

环境搭建

采用eureka+ribbon的方式,对多个user服务发送请求,并实现负载均衡

负载均衡原理

负载均衡源码追踪

负载均衡策略

如何选择负载均衡策略?

饥饿加载

复制(补充)


环境搭建

给order模块和user模块建立独立的数据库,使用mybatis访问数据库

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 user模块编写接口根据id获取用户信息:

返回样例:

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

order模块编写接口根据id获取订单信息以及对应的用户信息:

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

返回样例: 

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

采用eureka+ribbon的方式,对多个user服务发送请求,并实现负载均衡

根据1.2 eureka注册中心,完成服务注册将服务注册至euraka,注册两个user服务(复制方法在末尾)

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 通过浏览器访问euraka,可以看到注册了两个user实例

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 改写order模块接口,将实际ip:端口,修改为服务名(通过服务名访问)

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 在RestTemplate的bean上添加@LoadBalanced注解,实现负载均衡

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 重启服务,访问order模块接口10次

 可以看到,user服务被调用了5次1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

user2服务也被调用了5次

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

user和user2服务都被调用了5次,实现了使用eureka注册实例,ribbon负载均衡访问。

负载均衡原理

        负载均衡流程简要:

        某服务发出请求,被Ribbon拦截,Ribbon从eureka中拉取对应服务名称的服务列表,找到服务名对应的访问ip端口,经过负载均衡处理,发出真实的带ip端口的请求。如下图

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

负载均衡源码追踪

        在前面提到过,某服务发出请求,被Ribbon拦截,即LoadBalancerInterceptor,这个类会在对请求进行拦截,然后从eureka根据服务id获取服务列表,随后利用负载均衡算法得到真实的服务地址信息,替换服务id。

查看这个类,实现了客户端http请求拦截器接口 

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

在这个接口里有一个方法 

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

LoadBalancerInterceptor类自然是重写了intercept方法,在这里打个断点。 

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

发送请求,可以看到,程序在这里停止了,证明这个请求确实被拦截了

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 可以看到刚刚发送的请求地址

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 继续,能看到服务名称被获取:usersvice

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

拿到了服务名称,按照流程,应该要找eureka获取服务列表了

这里已经看到了ribbon的字眼了

服务名称被交给了这个方法,步进查看

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 步入1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 可以看到,已经获取了usersvice的两个服务的ip和端口了,即获取了服务列表。接下来就该到负载均衡了1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 步入

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 步入

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

步过到此,看到chooseServer方法,选择服务,步入

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

进入 chooseServer,步过到choose,注意rule(rule可是规则的意思啊,猜测以下,是负载均衡的规则)

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 点开这个rule查看, 看到IRule,查看IRule的实现类

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 可以看到几个熟悉的字眼,Random(随机),RoundRobin(轮询),说明找对了 

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

再回来看这里的rule,是ZoneAvoidanceRule,是某种规则

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 继续,执行返回到刚刚的方法,发现已经选择了 localhost:8081 ip和端口

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 接下来就是一路返回,最后发出真实的ip和端口的请求咯

负载均衡策略

内置负载均衡规则类 规则描述
RoundRobinRule 简单轮询服务列表来选择服务器。它是Ribbon默认的负载均衡规则。
AvailabilityFilteringRule 对以下两种服务器进行忽略: (1)在默认情况下,这台服务器如果3次连接失败,这台服务器就会被设置为“短路”状态。短路状态将持续30秒,如果再次连接失败,短路的持续时间就会几何级地增加。 (2)并发数过高的服务器。如果一个服务器的并发连接数过高,配置了AvailabilityFilteringRule规则的客户端也会将其忽略。并发连接数的上限,可以由客户端的<clientName>.<clientConfigNameSpace>.ActiveConnectionsLimit属性进行配置。
WeightedResponseTimeRule 为每一个服务器赋予一个权重值。服务器响应时间越长,这个服务器的权重就越小。这个规则会随机选择服务器,这个权重值会影响服务器的选择。
ZoneAvoidanceRule 以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询。
BestAvailableRule 忽略那些短路的服务器,并选择并发数较低的服务器。
RandomRule 随机选择一个可用的服务器。
RetryRule 重试机制的选择逻辑

如何选择负载均衡策略?

非常简单,在配置类配置ribbon的策略就行

方式1:定义IRule的bean,返回策略规则

@Bean
public IRule randomRule(){
    return new RandomRule();
}

方法2:配置文件配置策略规则

userservice: #给某个微服务配置负载均衡规则
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 

饥饿加载

当第一次访问服务的时候,由于Ribbon默认使用懒加载,导致时间会很长。

可以使用饥饿加载,服务一启动就加载,降低第一次的访问时耗、

如何配置饥饿加载?

  修改配置文件:

ribbon:
  eager-load:
    enabled: true
    clients: userservice

复制(补充)

点击 Copu Configuration

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

 Name和端口都要改,完成点击apply

 1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

可以看到,已经复制成功

1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪,微服务,eureka,ribbon,负载均衡

文章参考、图片来源:

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-619925.html

到了这里,关于1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡

    目录 一:Eureka注册中心 1. Eureka原理 2. 动手实践 ①搭建EurekaServer ②服务注册 ③服务发现  二:Ribbon负载均衡 1. 负载均衡原理 2. 负载均衡策略 3. 懒加载 tips:前些天突然发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,感兴趣的同学可以

    2024年02月05日
    浏览(32)
  • 【微服务技术一】Eureka、Nacos、Ribbon(配置管理、注册中心、负载均衡)

    微服务完整的技术栈如图: 技术栈学习: 概念: 在Eureka架构中,微服务角色有两类EurekaServer: 服务端,注册中心 记录服务信息 心跳监控 EurekaClient:客户端 Provider:服务提供者,例如案例中的user-service注册自己的信息到EurekaServer;每隔30秒向EurekaServer发送心跳 consumer:服务消

    2024年02月12日
    浏览(32)
  • 基于SpringCloud的微服务架构学习笔记(2)注册中心Eureka和负载均衡Ribbon

    1.7.1 远程调用的问题 地址信息获取 : 服务消费者 如何获取 服务提供者 的 地址信息 (不能每次都写死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多选一 :如果有多个服务提供者,消费者如何进行选择 监测健康状态 :消费者如何获知提供者的健康状态 1.7.2 eureka原理 地址

    2024年02月13日
    浏览(28)
  • 注册中心Eureka和Nacos,以及负载均衡Ribbon

    微服务,就是把服务拆分成为若干个服务,降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联

    2024年02月12日
    浏览(28)
  • 38.SpringCloud—注册中心(eureka/nacos)、负载均衡Ribbon

    目录 一、SpringCloud。 (1)认识微服务。 (1.1)单体架构与分布式架构(微服务)。 (1.2)微服务技术对比。 (1.3)SpringCloud。 (2)服务拆分及远程调用。 (2.1)服务拆分。 (2.2)远程调用。 (3)提供者与消费者。 (4)Eureka注册中心。 (4.1)Eureka的作用。  (4.2)搭建

    2024年02月09日
    浏览(43)
  • SpringCloud实用篇1——eureka注册中心 Ribbon负载均衡原理 nacos注册中心

    单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署。 优点:架构简单;部署成本低(打jar包、部署、负载均衡就完成了) 缺点:耦合度高(维护困难、升级困难,不利于大项目开发) 分布式架构 根据业务功能对系统做拆分,每个业务功能模块作为独立

    2024年02月13日
    浏览(27)
  • 【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

    微服务间相互调用的基础上,服务间的调用更多是以调用某多实例服务下的某个实例的形式。而这就需要用到负载均衡技术。对于开发者而言,只要通过@LoadBalance注解就开启了负载均衡。如此简单的操作底层究竟是什么样的,我想你也很想知道。 在《SpringCloud集成Eureka并实现

    2024年02月05日
    浏览(26)
  • Ribbon 负载均衡服务调用

    想要学习完整SpringCloud架构可跳转 : SpringCloud Alibaba微服务分布式架构 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套 客户端负载均衡 的工具。 Ribbon是Netflix发布的开源项目,主要功能是提供 客户端的软件负载均衡算法和服务调用。 Ribbon客户端组件提供一系列完善的配置项如连

    2024年02月16日
    浏览(25)
  • 第五章 Ribbon负载均衡服务调用

    1. Ribbon概述 Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心

    2024年02月04日
    浏览(29)
  • springcloud Ribbon负载均衡服务调用

    地址:https://github.com/13thm/study_springcloud/tree/main/days6_Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时

    2024年01月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包