Spring Cloud负载均衡

2019-08-01  本文已影响0人  一直想上树的猪

提起负载均衡,我们在服务端肯定听说过nginx负载均衡,但是nginx是针对于服务端的,什么意思呢?就是服务端的请求按照往常一样发送,将请求发送给nginx,由nginx参考自己项目的特点,选择一些算法决定当前的客户端请求到底由谁处理比较合适,服务端是什么都不知道的。
但是在Spring Cloud负载均衡中,正好相反,也就是说将调度的任务放在请求发起端,即Rebbon,首先它会从注册中心里面拿到所有的注册信息,然后客户端请求出来之后,会看看到底有几个服务能为这个请求服务,然后再根据一些调度算法进行调用。

一、基础准备

二、添加依赖

其实不用添加依赖,只要在consumer上有eureka依赖即可

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

三、搭建一个简单的集群

将provider项目赋值一份即可,赋值的时候refactory项目名,在pom中修改artifactId即可,更重要的是修改端口号。
然后在provider1中写一些标识:

@RestController
public class UserService {

    private Logger logger = LoggerFactory.getLogger(UserService.class);

    @PostMapping("/login")
    boolean login(@RequestBody UserLoginInfo userLoginInfo){
        logger.info("正在为客户端提供服务:provider:8071");
        return "amdin".equals(userLoginInfo.getUsername()) && "123456".equals(userLoginInfo.getPassword());
    }
}

在provider2中的标识:

logger.info("正在为客户端提供服务:provider2:8081");

四、测试

在consumer中调用五次login服务,可以看到在provide1r中调用了三次,在provider2中调用了两次,可以大题看到rebbon默认选择的是轮询的方式去进行调度的。

五、调度规则

netflix的loadbalancer中我们可以看到各种的负载均衡调用的rule,他们其实都是事先了IRule接口

调度规则role

六、使用其他的轮询规则

如果我们想要使用randomRule而不用轮询,我们可以在consumer项目中的ylm添加:

#更换负载均衡策略
dm-user-provider:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

其中,dm-user-provider是我们provider的注册名,不同的服务注册的名称都不相同,(即provider1和provider2的注册名都是一样的,只是端口不一样罢了)。然后指定想要的遵循的调度算法即可。

上一篇 下一篇

猜你喜欢

热点阅读