网关的包 <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/
本文介绍如何使用Spring Cloud Gateway进行路由配置,并结合Hystrix实现服务熔断,防止雪崩效应。涵盖依赖包引入、YAML配置详情、自定义负载均衡策略等关键信息。

1617

被折叠的 条评论
为什么被折叠?



