在生产环境下,一般微服务都会有多个实例,那么服务消费者如何将请求分摊到不同的实例呢?比如我们的用户微服务有俩个实例,那么电影微服务怎么讲请求比较均匀的分摊到俩个用户微服务呢?总不能一直去请求同一个吧!
Ribbon简介
Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。Ribbon配置服务提供者的地址后,Ribbon会根据它自己的负载均衡算法去为我们分配我们的请求相应的服务提供者。负载均衡的算法有多种,例如轮询、随机等。当然,我们也可以为Ribbon实现自定义的负载均衡算法。那么当Ribbon与Eureka一起使用的时候,Ribbon从Eureka上获取到服务列表,从而根据自己的算法来确定我们请求的服务对象。
Ribbon的配置还是比较简单的,比如在我们的电影微服务中加入Ribbon的配置,因为它是要调用用户微服务的
加入ribbon的jar包:
<!-- ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
启动类中加入注解:
@Bean
@LoadBalanced //负载均衡
public RestTemplate getTemplate(){
return new RestTemplate();
}
那么RestTemplate请求服务提供者的时候就具备了负载均衡的能力
@GetMapping(value = "user")
public User getUser(long id){
User user = restTemplate.getForObject("http://microservice-provider-user/find?id=" + id, User.class);
return user;
}
microservice-provider-user为用户微服务注册到Eureka中的配置
spring.application.name=microservice-provider-user
那么我的用户微服务启动了俩个,在四次请求过程当中,控制台打印出的信息显示是均摊到了俩个用户微服务上的
每个服务的控制台打印出俩条sql数据,说明负载均衡是起作用的
个人建的交流群1125844267,欢迎大家加入!
如果内容对大家有所帮助,感谢鼓励!实现我小时候一人给我一块钱的美梦,哈哈!