使用springCloud构建微服务实现——客户端测负载均衡

2022-05-12 20:30:34 浏览数 (1)

一、前期准备

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

使用springCloud构建微服务实战

二、本篇主题

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

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

(1)一个注册中心

(2)两个生产者

(3)一个消费者

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

(1)provider1中的Controller方法为:

代码语言:javascript复制
@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一样,这是打印的日志不一样。

代码语言:javascript复制
@RequestMapping(value = "/count",method = RequestMethod.GET)
    public String count(@RequestParam("count") int count){

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

3、对消费者进行操作

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

代码语言:javascript复制
 @RequestMapping("/mcount")
    public String count(){
        for(int i=;i<;i  ){
           schedualServiceHi.count(i);
        }
        return "负载均衡完成!";
    }

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

代码语言:javascript复制
@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的打印日志:

从中可以看出这十次是轮询访问所有生产者的,实现了负载均衡。 四、总结 通过以上操作,我们实现了微服务负载均衡的功能

0 人点赞