网关的包 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> 熔断的包,防止雪崩 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency> yml里面配置: spring: redis: host: 127.0.0.1 port: 6379 database: 10 application: name: iem-gateway cloud: gateway: discovery: locator: enabled: true lower-case-service-id: true routes: - id: iem-resource uri: lb://iem-resource predicates: - Path=/resource-api/** filters: - StripPrefix=1 - name: Hystrix args: name: fallbackcmd fallbackUri: forward:/fallBackResource
一个应用启动多次,9009,8001端口,riboon负载均衡
my-load-balanced-service: ribbon: listOfServers: localhost:9009,localhost:8001 NFLoadBalancerRuleClassName: com.brt.iem.gateway.auth.blance.MyLoadBalancerRule #com.netflix.loadbalancer.RoundRobinRule
MyLoadBalancerRule均衡策略可以自己写
package com.brt.iem.gateway.auth.blance.MyLoadBalancerRule; import com.netflix.client.config.IClientConfig; import com.netflix.loadbalancer.AbstractLoadBalancerRule; import com.netflix.loadbalancer.ILoadBalancer; import com.netflix.loadbalancer.Server; import java.util.ArrayList; import java.util.List; /** * peiyajie 20200824 */ public class MyLoadBalancerRule extends AbstractLoadBalancerRule { private volatile int total; private volatile int index; List<Server> upList=new ArrayList<Server>(); public Server choose(ILoadBalancer lb,Object key){ if(lb==null){ return null; }else{ Server server=null; while(server==null){ if(Thread.interrupted()){ return null; } List<Server> allList=lb.getAllServers(); int serverCount =allList.size(); if(serverCount==0){ return null; } if(total==0){ upList=lb.getReachableServers(); } if(total<3){ if(upList.size()!=lb.getReachableServers().size()){ index=0; } server=lb.getReachableServers().get(index); total++; }else{ total=0; index++; if(index>=lb.getReachableServers().size()){ index=0; } } if(server==null){ Thread.yield(); }else{ if(server.isAlive()){ return server; } server=null; Thread.yield(); } }//server=null的判断 return server; } } @Override public void initWithNiwsConfig(IClientConfig clientConfig) { } @Override public Server choose(Object key) { return this.choose(this.getLoadBalancer(),key); } }
参考:https://blog.youkuaiyun.com/u014704612/article/details/105028834/