SpringCloud集成Eureka并实现负载均衡

这篇具有很好参考价值的文章主要介绍了SpringCloud集成Eureka并实现负载均衡。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

辗转两家公司也算工作了大半年,有幸见识过很多微服务架构,比如Dubbo+Redis的组合;Dubbo+Zookepper的组合;SpringCloud+Eureka的组合;SpringCloud+Nacos的组合…
每一种组合都有属于自己的故事。
笔者认为:流行的不一定是最好的,如果只学习最流行的技术,这对以后的发展是很受限的。作为后端我们还是需要追求一定的广度。在以后的职业生涯中遇到一些特殊业务场景,才能够有更多的方案去灵活应对!当领导让你做技术选型,你直接好几套方案往他面前一摆,这真的很酷炫。
我想从当下最流行的SpringCloud体系谈起,从demo到底层循序渐进地整理出每一套组合,也非常希望能够对你起到一些绵薄的帮助~

故事从Eureka(译文:发现你了)说起…

1.Eureka

你问我Eureka是什么,其实就是一个基于SpringBoot的Java程序。解压Eureka-server的jar包之后,可以清楚看到一个标准的Java目录结构(还有一些存放前端页面的static文件):
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
和nacos非常相似,只不过Eureka作为注册中心默认是将实例信息存放在eureka-server内存中,这比较适用于开发环境与测试环境,生产环境中还是建议配置相应的数据库表,做好数据持久化。在启动方式上,二者大体相似,shell脚本,maven模块启动,docker镜像…都可以实现。

2.整合Eureka作为注册中心

下面采用将Eureka-server作为独立maven模块的方式启动来作为注册中心,其实本质也就是扫描运行Eureka-server的jar包而已,并在此过程中做一些人为配置:

2.1创建maven工程

创建一个父-子结构的maven工程,这个很简单点点点就好
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡

2.2依赖配置(Eureka-Server)

作为独立的maven模块启动Eureka服务,只需要引入核心依赖,配置一个启动类,并配置相应路径端口即可提供服务:

        <!--eureka服务端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡

server:
  port: 10086 # 服务端口
spring:
  application:
    name: eureka-server # eureka的服务名称
eureka:
  client:
    service-url:  # eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka

2.3业务配置(Eureka-Client)

在业务模块中,都属于Eureka的客户端,其核心依赖为:

        <!--eureka客户端依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

并在相应的模块中配置服务端的地址
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
直到这里,当启动eureka-server、user-service模块之后,登录http://127.0.0.1:10086就会发现,Eureka-server作为注册中心已经成功注册了user-service服务,就像这样:
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡

2.4服务调用流程

在一个订单服务(A)调用用户服务(B)的模型中,A服务从Eureka-server获取B服务的地址。在A服务中使用RestTemplate通过getForObject()方法发送HTTP请求到B服务的地址,并处理返回的响应将其封装为指定的对象。
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
这是一个最简单的调用链路。用非官方语言描述该过程,即A拿着B的使用说明书向B发消息并得到了回应,而Eureka正是那本说明书
当然,在生产环境中一个微服务不太可能只会有单实例,更多的是一服务多实例的形式,当被调用方接收到调用请求,会去做负载均衡的处理,从而将请求落到合适实例上。以此来实现高可用、高扩展、高伸缩…

3.集成负载均衡

首先给一个服务多部署几个实例:
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
效果就像这样:
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
以前我们拉取的是某个服务的那个实例,现在则是拉取某个服务的实例列表。并在此基础上通过负载均衡将发来的请求指定到其中的某一实例上。
那要怎么实现呢?
只需要在服务调用方添加一个注解即可,最简单的方式就是这样:

    @Bean
    @LoadBalanced //负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

其实,在RestTemplate内部继承了一个拦截器(实现请求的转发,也就是负载均衡),而@LoadBalance注解则是帮助开启了该功能
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
注解本身是没有实现相关功能的(后面分析实现原理):
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
言归正传
现在我们的user服务已经有三个实例,并且已经进入到了负载均衡的列表
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
我们用aop做一个切面,来把负载均衡分发到服务实例上的信息以日志的形式打印到控制台,以便更直观地看到均衡的效果:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

注入Eureka客户端,通过提供的api来查询服务的客户端分发到的实例信息:

@Aspect
@Component
@Slf4j
public class RequestAspect {
    @Resource
    EurekaClient eurekaClient;

    @Before(value = "execution(* com.yu7.user.web.*.*(..))")
    public void logBefore(JoinPoint joinPoint) {
        String methodName = joinPoint.getSignature().getName();
        String className = joinPoint.getTarget().getClass().getName();
        log.debug("调用方法:{} ", className + "." + methodName);
        InstanceInfo instanceInfo = eurekaClient.getApplicationInfoManager().getInfo();
        log.debug("负载均衡到的实例信息为:{}",instanceInfo.getInstanceId());
    }
}

当调用方再次发起请求,观察控制台的信息,可以直接看到请求被分发到了端口为8084的实例上:
SpringCloud集成Eureka并实现负载均衡,SpringCloud体系,Eureka,spring cloud,eureka,负载均衡
负载均衡成功实现文章来源地址https://www.toymoban.com/news/detail-752498.html

到了这里,关于SpringCloud集成Eureka并实现负载均衡的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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日
    浏览(57)
  • 【SpringCloud】二、服务注册发现Eureka与负载均衡Ribbon

    服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务) 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口) 很明显,这是一个相对的概念。 上一篇中,远程调用时,url参数是写死在代码中的,而不同的测试、生产、

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

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

    2024年02月05日
    浏览(37)
  • SpringCloud微服务 【实用篇】| Eureka注册中心、Ribbon负载均衡

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

    2024年02月05日
    浏览(49)
  • springcloud3 GateWay章节-Eureka+gateway动态路由负载均衡1

    gateway相当于所有服务的门户,将客户端请求与服务端应用相分离,客户端请求通过gateway后由定义的路由和断言进行转发,路由代表需要转发请求的地址,断言相当于请求这些地址时所满足的条件,只有同时符合路由和断言才给予转发 gateWay是微服务的API网关,能够实现服务的

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

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

    2024年02月13日
    浏览(35)
  • Spring Cloud Gateway集成Nacos实现负载均衡

    💡Nacas可以用于实现Spring Cloud Gateway中网关动态路由功能,也可以基于Nacos来实现对后端服务的负载均衡,前者利用Nacos配置中心功能,后者利用Nacos服务注册功能。 接下来我们来看下Gateway集成Nacos实现负载均衡的架构图 一. 环境准备 1. 版本环境 Jdk: java.version1.8/java.version Spr

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

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

    2024年02月13日
    浏览(38)
  • 详解SpringCloud微服务技术栈:强推!源码跟踪分析Ribbon负载均衡原理、Eureka服务部署

    👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用 📚订阅专栏:微服务技术全家桶 希望文章对你们有所帮助 服务提供者:一次业务中,被其它微服务调用的服务(提供接口给

    2024年01月18日
    浏览(43)
  • SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

    SpringCloud=分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 springboot版本选择: git源码地址:https://github.com/spring-projects/spring-boot/releases/ SpringBoot2.0新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release springcloud版本选

    2024年02月08日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包