springcloud系列教程|第四章:客服端负载均衡 Ribbon

客服端负载均衡 Ribbon

1:前言

     上一篇讲到了客户端发现eureka的使用,分别实现了eureka客户端以及服务端,通过服务端的调度,完成服务之间的调用。还有个问题一直没有解决,就是服务消费者调用服务提供者的硬编码问题,这篇将讲述spring cloud ribbon的使用并解决硬编码的问题。

2:客户端负载均衡是什么

     基于客户端的负载均衡,简单的说就是在客户端程序里面,自己设定一个调度算法,在向服务器发起请求的时候,先执行调度算法计算出向哪台服务器发起请求,然后再发起请求给服务器。

3:客户端负载均衡的特点

  • 由客户端内部程序实现,不需要额外的负载均衡器软硬件投入。
  • 程序内部需要解决业务服务器不可用的问题,服务器故障对应用程序的透明度小。
  • 程序内部需要解决业务服务器压力过载的问题。

4:实战-ribbon实现客户端负载均衡

     首先请小伙伴先看我的上一篇文章,并且获取相应的代码:springcloud系列教程|第三章:服务发现组件-eureka,ribbon部分的代码需要上篇文章的代码。一共三个项目:

microserivce-provider
microservice-consumer
microserviceservereureka

     接下来改造microservice-consumer部分代码。
     第一步:在microservice-consumer的RestTemplate类上添加一个注解@LoadBalanced

@SpringBootConfiguration
public class Config {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

     第二步:在microservice-consumer的application.yml文件中添加以下配置:

spring:
  application:
    name: microservice-cosumer-user-ribbon  #设置微服务的名字

     第三步:提一下并不需要添加ribbon的依赖,因为spring-cloud-starter-eureka包里存在spring-cloud-starter-ribbon的包,看一下controller,这里解决了硬编码的问题:可以发现microservice-provider-user其实是要调用的服务提供者的虚拟IP,假如有30个相同服务实例,那么每个服务实例都要配置相同的应用名称-microservice-provider-user,那么在microservice-consumer-user进行负载均衡的时候,只需要调用这个名字,会根据负载均衡策略自动搜索动态ip,解决硬编码问题。

@RestController
public class UserController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/user/{id}")
    public User findById(@PathVariable int id){
        /*
        * VIP virtual ip   下面地址要改应用名称 :虚拟IP
        * */
        return  this.restTemplate.getForObject("http://microservice-provider-user/user/get/" +id,User.class);
    }

}

 第四步:启动microserivce-provider和microservice-consumer还有microserviceservereureka,在这里我们需要对microserivce-provider项目开启3个实例,在不同端口运行,我们需要知道microserivce-consumer是否实现了负载均衡。大家可能会遇到问题,IDEA怎么实现同一个工程在不同端口运行呢?

首先先进入edit configurations,然后点击single instance only,最后应用即可

     之后要注意除了第一次不要改application.yml的server.port,第二次开始点击RUN Application,就要修改端口保证不重复,其实就在一个项目里改,点一次改一次,这在很多的博客中都没有提到,请读者注意。

     接着我们来看看eureka服务端以及客户端打印的信息:microserivce-provider一共有3个实例,访问http://localhost:8001/user/1会调用microservice-provider的服务,默认的可能是随机的,看我打印的日志就知道,7001端口和7002和7000端口打印的次数不一样。

     到这里为止,我们已经实现了ribbon的负载均衡,那么接下来我们要讲下如何自定义ribbon的负载均衡规则。

5:自定义配置ribbon

     第一步:先创建自定义的配置,注意这里的包的级别要和启动类的所在包同级,而不是放在里面。

     第二步:编写配置类内容:


@Configuration
public class TestConfiguration {
    @Bean
    public IRule ribbonRule (){
        /*负载均衡采取轮询策略*/
        return new RoundRobinRule();
    }
}

     第三步:设置启动类配置@RibbonClient

@EnableEurekaClient
@SpringBootApplication
/*microservice-provider-user 服务采用的应该是TestConfiguration配置的随机原则*/
@RibbonClient(name = "microservice-provider-user", configuration = TestConfiguration.class)
public class ConsumerRibbonApplication {
	public static void main(String[] args) {
		SpringApplication.run(ConsumerRibbonApplication.class, args);
	}
}

     测试就是3个端口分别轮着来接收请求,到此,整个ribbon的负载均衡策略讲解完毕。


源码地址:springcloud-lesson-3

如果有小伙伴觉得我写的不错的话可以关注一下我的博客,我会一直持续更新,也可以支持一下我的公众号哦:java架构师小密圈,会分享架构师所必须深入研究的技术,比如nettrt,分布式,性能优化,spring源码分析,mybatis源码分析,等等等,同时还会分享一些赚钱理财的小套路哦,欢迎大家来支持,一起学习成长,程序员不仅仅是搬瓦工!
公众号:分享系列好文章
java架构师小密圈

交流群:群友互相分享资料
java架构师小密圈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mindcarver

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值