- 创建ribbon-consumer
- 添加依赖,调用eureka-client
- 启动多个eureka-client
- 将负载均衡策略应用到全局或指定服务
在父工程下面创建模块ribbon-consumer
添加如下依赖:
org.springframework.cloud spring-cloud-starter-netflix-eureka-clientorg.springframework.cloud spring-cloud-starter-netflix-ribbonorg.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这个负载均衡技术了吧,这里我们进入到一个小小的彩蛋部分的内容。
我们聊一聊“影响力”这个事情,很多做技术的同学,真的是一心只读圣贤书,两耳不闻窗外事,打个比方,一个组里有五个程序员,其中有四个是老黄牛,任劳任怨,吃的是草,挤的是奶,那假如第五个同学,他并不是那么任劳任怨,而是在大家完成项目的时候发一份总结性的邮件,发给整个公司或者是他的经理,那么在经理的印象中,大家说谁的影响力最大?
大家可能对这种方式嗤之以鼻,认为是拍马屁,那如果这个活不是你做的,你发了这个邮件,这有点像邀功悬赏的意思,很多人不屑于这样做,或者觉得不好意思,但是这往往真的是扩张自己影响力的事情。
有的人犯的错误就是,你在背后默默工作,但是没有人知道。这就是自己推销自己的能力,你要推销自己,推销自己的项目,推销自己做了什么,让更多的人看到你自己的贡献,往往越往上,这种能力就越重要,那如果大家都像老黄牛一样一直默默无闻,那么你只能期待正儿八经真真正正的伯乐来发现你,然后把你带到聚光灯下,那为什么我们不自己走到聚光灯下呢?因为真的是千里马常有,伯乐不常有,能遇到一个非常赏识你能力的上司,真的是可遇不可求,很多时候在大部分情况下,我们都要去自己推销自己,自己主动的扩张这种影响力。
很多同学觉得,我是个程序员,天生不善言辞,不善交际,而且沉默又内向,其实这是大众给我们这个职业扣上的一顶帽子,我们不要自己往这个套子里面去钻,当你真正走到聚光灯下,其实你会发现另外一个自己,不可否认过于内向、过于沉默,确实在职业发展瓶颈上是有那么一点吃亏,那么我们不妨在职业生涯不太晚的时候开始重视这个问题,开始有意识的培养自己这种扩张影响力的能力、这种交际的能力、总结性发言、陈词演讲等各种技术以外的软实力,随着你年龄的不断增长,我们不可能会一直在一线继续承担不断编码的工作,你不可能一直沉默的当个程序员,所以我们更需要这种推荐自己的能力,自己主动的走到聚光灯下,勇于表达自己的观点,让更多的人知道你所做的贡献,不要被害羞、沉默这些词禁锢住自己,不要怕做不好,不要怕自己做不到,既然我们能把写代码这么困难的事情做好,相信其他事情肯定是不在话下的。
所以小编希望大家的努力,在以后能被更多的人看到和赏识。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)