SpringCloud之负载均衡Ribbon

SpringCloud之负载均衡Ribbon,第1张

SpringCloud之负载均衡Ribbon 快速入门 添加负载均衡
  • 创建ribbon-consumer
  • 添加依赖,调用eureka-client
  • 启动多个eureka-client
  • 将负载均衡策略应用到全局或指定服务
1.创建ribbon-consumer

在父工程下面创建模块ribbon-consumer

添加如下依赖:

 	
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-ribbon
        
        
            org.springframework.boot
            spring-boot-starter-web
        
    

给RestTemplate添加负载均衡功能:

@SpringBootApplication
@EnableDiscoveryClient
public class RibbonConsumerApplication {
    public static void main(String[] args) {
        new SpringApplicationBuilder(RibbonConsumerApplication.class)
                .web(WebApplicationType.SERVLET)
                .run(args);
    }
    //添加负载均衡功能
    @LoadBalanced
    @Bean
    public RestTemplate template(){
        return new RestTemplate();
    }
}

编写controller:

@RestController
public class Controller {
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/sayHi")
    public String sayHi() {
        return restTemplate.getForObject(
                "http://eureka-client/sayHi",
                String.class);
    }
}

这样的话,我们在通过RestTemplate进行远程调用的时候,再也不需要传给他具体的服务地址,只需要告诉他相应的服务名,它就会默认通过轮训的方式帮助我们自动选择,完成负载均衡的功能。

下面我们添加配置项,启动服务来玩一玩:

spring:
  application:
    name: ribbon-consumer
server:
  port: 31000
eureka:
  client:
    service-url: 
      defaultZone: http://localhost:20000/eureka/

我们启动eureka-server与eureka-client:

然后我们修改eureka-client的端口号再次启动一个服务:

如果idea提示"progress XXX is running…",解决办法:

勾选右上角的Allow parallel run选项

最后我们再启动ribbon-consumer:

可以看到我们的四个应用都已经启动起来了。
接下来我们通过Postman调用ribbon-consumer看它会不会在后台轮训的调用两个不同的eureka-client,来验证一下负载均衡的功能。

我们先访问localhost:20000:

在instance里我们可以看到已经出现了两个服务,eureka-client的Availability Zones也显示了两个。

接下来我们就调用一下ribbon-consumer:

第一次访问,看到已经返回了,可以看出是调用的30001这个实例,我们再次调用:

这次又请求了30000这个实例,我们经过实验不难发现,每次调用都是轮训请求30001和30000这两个实例。

自定义负载均衡策略

从上面案例中我们不难发现,Ribbon默认的负载均衡策略是全局的轮训的方式,除此之外,我们还可以通过自定义的配置,来指定Ribbon的负载均衡策略。

有的小伙伴可能会问了,为什么我在这里强调了一下“全局”呢?
聪明的小伙伴们可能已经猜到了,没错,Ribbon还可以通过配置,来指定针对于哪个服务来进行负载均衡,除此以外还能进行方法级别的负载均衡!
看到这里,我们是不是感觉Ribbon特别短小精悍呢。

话不多说,我们直接开干!

全局随机负载均衡策略

首先创建配置类,来指定随机负载均衡策略:

@Configuration
public class RibbonConfiguration {

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

为了方便验证,我们启动三个eureka-client,然后启动ribbon-consumer:

最后我们通过Postman测试会发现,每次调用都是随机的。

服务级别负载均衡

首先我们先注释掉上面全局随机策略的配置:

然后我们给ribbon-consumer添加配置:

前面是要指定的服务名称,也就是application name,后面的格式是固定的,我们只需要指定负载均衡策略的全限定类名就可以了。

然后我们重启ribbon-consumer,然后再次通过Postman测试,我们也会发现是随机调用的。

除了这种利用配置文件的配置方式以外,我们还可以通过注解的方式来指定负载均衡策略:

我们只需要在配置类中,添加@RibbonClient注解,指定负载均衡的服务名称,和负载均衡策略类。

题外话,聊聊影响力

看到这里相信很多聪明的小伙伴们都已经学会了Ribbon这个负载均衡技术了吧,这里我们进入到一个小小的彩蛋部分的内容。

我们聊一聊“影响力”这个事情,很多做技术的同学,真的是一心只读圣贤书,两耳不闻窗外事,打个比方,一个组里有五个程序员,其中有四个是老黄牛,任劳任怨,吃的是草,挤的是奶,那假如第五个同学,他并不是那么任劳任怨,而是在大家完成项目的时候发一份总结性的邮件,发给整个公司或者是他的经理,那么在经理的印象中,大家说谁的影响力最大?

大家可能对这种方式嗤之以鼻,认为是拍马屁,那如果这个活不是你做的,你发了这个邮件,这有点像邀功悬赏的意思,很多人不屑于这样做,或者觉得不好意思,但是这往往真的是扩张自己影响力的事情。

有的人犯的错误就是,你在背后默默工作,但是没有人知道。这就是自己推销自己的能力,你要推销自己,推销自己的项目,推销自己做了什么,让更多的人看到你自己的贡献,往往越往上,这种能力就越重要,那如果大家都像老黄牛一样一直默默无闻,那么你只能期待正儿八经真真正正的伯乐来发现你,然后把你带到聚光灯下,那为什么我们不自己走到聚光灯下呢?因为真的是千里马常有,伯乐不常有,能遇到一个非常赏识你能力的上司,真的是可遇不可求,很多时候在大部分情况下,我们都要去自己推销自己,自己主动的扩张这种影响力。

很多同学觉得,我是个程序员,天生不善言辞,不善交际,而且沉默又内向,其实这是大众给我们这个职业扣上的一顶帽子,我们不要自己往这个套子里面去钻,当你真正走到聚光灯下,其实你会发现另外一个自己,不可否认过于内向、过于沉默,确实在职业发展瓶颈上是有那么一点吃亏,那么我们不妨在职业生涯不太晚的时候开始重视这个问题,开始有意识的培养自己这种扩张影响力的能力、这种交际的能力、总结性发言、陈词演讲等各种技术以外的软实力,随着你年龄的不断增长,我们不可能会一直在一线继续承担不断编码的工作,你不可能一直沉默的当个程序员,所以我们更需要这种推荐自己的能力,自己主动的走到聚光灯下,勇于表达自己的观点,让更多的人知道你所做的贡献,不要被害羞、沉默这些词禁锢住自己,不要怕做不好,不要怕自己做不到,既然我们能把写代码这么困难的事情做好,相信其他事情肯定是不在话下的。

所以小编希望大家的努力,在以后能被更多的人看到和赏识。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5522409.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-13
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存