使用springCloud构建微服务实现——客户端测负载均衡(自定义负载均衡策略)

一、前期准备

先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的博文。

使用springCloud构建微服务实战

二、本篇主题

在生产环境中,各个微服务都会部署多个实例,服务消费者需要将请求分摊到多个服务提供者上,在微服务中,当Ribbon与Eureka配合使用时,Ribbon可基于某种算法,自动地帮助消费者去请求,因为feginClient已经默认使用了Ribbon,只需要引入fegin的依赖就可以了。

1、在上篇的基础上,我们新建一个与上一个provider生产者一样的服务,只是端口号不一样,应用名与上一个一致。这时候,我们有了以下的服务:

(1)一个注册中心

(2)两个生产者

(3)一个消费者

2、在两个生产者中写同样的Controller,但是打印的日志不一样。

(1)provider1中的Controller方法为:

@RestController
public class TestController {


    //打印日志的属性
    private static final Logger LOGGER= LoggerFactory.getLogger(TestController.class);

    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam ("count") int count){

        LOGGER.debug("provider1第{}次访问",count);
        return "1111111111111111111";
    }

}

(2)provider2中Controller的方法与provider1一样,这是打印的日志不一样。

@RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count){

        LOGGER.info("provider2第{}次访问",count);
        return "222";
    }

3、对消费者进行操作

(1)在Controller中添加一个测试的方法,该方法循环调用十次生产者的方法。

 @RequestMapping("/mcount")
    public String count(){
        for(int i=1;i<11;i++){
           schedualServiceHi.count(i);
        }
        return "负载均衡完成!";
    }

(2)在SchedualServiceHi接口中添加调用生产者的方法。

@FeignClient(name= "myprovider",fallback = TestFeignImpl.class)
public interface SchedualServiceHi {

    @RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count);
}

三、效果展示

1、将所有项目运行,打开浏览器请求消费者中mcount的方法。

查看两个provider的打印日志,如下:

(1)provider1的打印日志:

(2)provider2的打印日志:

从中可以看出这十次是轮询访问所有生产者的,实现了负载均衡。

四、对负载均衡策略实现自定义

1、引入springCloud的ribbon依赖

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

2、在配置类中设置策略方法

Ribbon的核心组件是IRule,是所有负载均衡算法的父接口,他的每一个子类都是一种负载均衡算法。例如:

(1)RoundRobinRule 轮询

(2)RandomRule 随机

上一步结果是默认的策略轮询。

3、修改策略时,配置类代码如下:设置为随机策略.

@Configuration
public class ConfigBeans {

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

4、结果展示

(1)provider1的日志:

(2)provider2的日志:

可以很容易看出,结果是随机访问生产者的。

五、总结

通过以上操作,我们实现了微服务负载均衡的功能,更多精彩欢迎关注微信公号:

猜你喜欢

转载自blog.csdn.net/jiankang66/article/details/90211012
今日推荐