一、前期准备
先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的文章。
使用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的打印日志:
从中可以看出这十次是轮询访问所有生产者的,实现了负载均衡。 四、总结 通过以上操作,我们实现了微服务负载均衡的功能