美文网首页web后端springcloud@产品
利用Spring Cloud实现微服务(五)- 负载均衡

利用Spring Cloud实现微服务(五)- 负载均衡

作者: 书兴 | 来源:发表于2017-04-12 23:21 被阅读4508次

    1. 负载均衡架构介绍

    在Spring Cloud框架中,负载均衡服务本身也要作为一个发现客户端注册到Eureka服务器上。客户发起一个请求时,需要在Eureke服务器上发现负载均衡服务,负载均衡服务通过RestTemplate调用微服务的接口时,会通过Ribbon进行负载均衡。这样,不同的服务请求会由负载均衡机制分别调用微服务的不同实例。

    本次示例中,启动两个bookingcar-service微服务实例,端口分别为:2227,2228,负载均衡服务loadbalance-service实例的端口为2288。

    2. 代码实现

    2.1在bookingcar-service里添加负载均衡测试接口

    由于实例和端口是绑定的,如果端口不同,我们可以认为负载均衡调用了不同的实例来响应服务请求。为验证负载均衡,我们希望能看到被调用的bookingcar-service微服务实例的端口信息。

    负载均衡验证接口的端点:http://…/v1/lbtest/port,返回该实例的端口信息。

    2.2新增loadbalance-service项目,该项目是一个负载均衡服务,也需要注册到Eureka-Server。

    1)我们同样需要到start.spring.io创建spring boot项目,名称为ribbon-service,依赖项包括Eureka server、Ribbon、Web。其它过程同bookingcar项目类似,不再累述。

    2)在入口程序里,添加@EnableDiscoveryClient注解。实际上,发现服务可以有很多种,包括Eureka自身,还包括zookeeper,consul等服务注册与发现的服务器。我们在上一节bookingcar里,使用的@EnableEurekaClient注解,表明我们直接把服务注册到Eureka Server上。

    Ribbon实现的负载均衡自动化配置需要满足下面两个条件:1.RestTemplate类必须存在于当前工程的环境中;2. 必须有LoadBalancerClient的实现Bean。所以我们添加了18到22行的代码以开启Ribbon的负载均衡能力。

    3)新建一个LoadBalanceService类,实现两个方法:TestPort以及TestGetOrderByUserId。RestTemplate使用服务的逻辑名,而不是服务的URI来查找服务。所以,我们会直接把微服务的名称作为传入参数。通过RestTemplate的getForObject方法,我们可以调用bookingcar微服务的接口。注意:这里调用的微服务只注明了逻辑名,而没有标明端口。

    4)新建一个LoadBalanceController类,实现两个Restful API接口。接口1的功能是测试负载均衡之微服务的端口,端点为:http://.../v1/lb/testport?name={microserviceName}。接口2的功能是测试负载均衡之微服务响应,端点为:http://.../v1/lb/testorderapi?name={microserviceName}&userid={userid}

    5)配置负载均衡微服务属性

    spring.application.name=loadbalance-service

    spring.freemarker.enabled=false

    spring.thymeleaf.cache=false

    eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/

    server.port=2288

    3. 验证

    3.1启动Eureka-Server

    3.2启动bookingcar微服务实例

    3.3将bookingcar项目application.properties文件中server.port值改为2228,重新启动一个新的bookingcar微服务实例,我们在Eureka界面里会发现已经有两个bookingcar微服务注册到Eureka服务器上。

    3.4验证bookingcar-service里添加负载均衡测试接口,发现其已如预期工作

    3.5 启动loadbalance-service。启动后,在Eureka界面,我们发现loadbalance-service也已经注册到了Eureka服务器上了

    3.6点击loadbalance-service服务后面的链接,我们会进入该服务的入口,输入不同的请求参数,我们可以观察到不同的响应。

    1)http://cpx-bkdhx46cy4h.dir.svc.accenture.com:2288/v1/lb/testport?name=bookingcar-service

    第一次:

    第二次:

    两次端口不一样,说明调用了bookingservice微服务的不同实例,负载均衡器Ribbon起了作用

    2) http://cpx-bkdhx46cy4h.dir.svc.accenture.com:2288/v1/lb/testorderapi?name=bookingcar-service&userid=1

    第一次:

    第二次:

    两次端口不一样,说明调用了bookingservice微服务的不同实例,负载均衡器起了作用

    4. 总结

    Spring Cloud框架中引入了Ribbon,通过和RestTemplate类及@LoadBalanced、@Bean注解的配合,实现了微服务架构里的负载均衡。

    代码:https://github.com/shuxingliu/microservices

    利用Spring Cloud实现微服务(七)- 内部调用

    利用Spring Cloud实现微服务(六)- 服务网关

    利用Spring Cloud实现微服务(四)- 微服务实现与注册

    利用Spring Cloud实现微服务(三)- 业务领域驱动微服务设计

    利用Spring Cloud实现微服务(二)--领域驱动设计

    利用Spring Cloud实现微服务(一):Eureka服务器

    相关文章

      网友评论

        本文标题:利用Spring Cloud实现微服务(五)- 负载均衡

        本文链接:https://www.haomeiwen.com/subject/vrrvattx.html