项目后台框架是使用的springboot ,前端使用的是angularJS,中间使用gateway做一层转发。其实也是微服务的思想。那么在gateway这层怎么实现负载均衡。就使用到了zuul,那么可以使用zuul 的Ribbon来实现负载均衡。
这个是我们项目原先做了一个配置。主要是zuul实现转发(未使用Ribbon,未使用Eureka),其中routes下面的 platform-service和image-detect-service是后台的两个独立的项目,他们的RestApi路径使用了不同的标识(这是我们自己定义的规范)。反正实现的效果就是,如果路径是api开头就转发到8010端口,如果是路径是/ids开头那么就转发到8011端口另外一个项目。重写了zuul中的pro前置过滤器能够实现。
接下来实现负载均衡 (接下来我们只对platform-service这个项目进行负载均衡)
首先我们将platform-service这个项目启用两个不同的端口发布起来
先在idea中dev.yml将server:port 修改为8012通过mvn clean compile install -DskipTests将项目编译,然后再target文件夹,将war包拷贝出来,在war包这个文件夹打开cmd命令行,执行 java -jar xxx.war发布 ,然后再在idea中奖port修改为8010,通过idea发布。这样platform-service就在8010和8012发布起来了。
修改配置:
添加的配置 platform-service 是和zuul:rotes:platform-service中同名的。 listOfServices是platfor-service项目的服务列表地址和端口,多个的话使用,将其分割。
ribbon:eureka:enabled:false这个设置的是禁用eureka。
现在就ok了,启动项目访问测试,会发现调用不同的端口访问platform-service,也可以将8010的端口关闭,它会直接去访问8012端口的项目,这就是ribbon实现负载均衡和nginx实现的负载均衡不一样,如果是nginx实现的,如果你upstream的服务宕机了,那么不会自动的去寻找下一个服务。这时候ribbon默认的启动的策略是RoundRobinRule 也就是轮询策略。