springboot+gateway+hystrix
1、引入依赖2、配置这里可以配置多个网关,我在这里配置了两个,通过数组下标的方式对每一个网关进行配置3、编码先创建一个类继承GlobalFilter和Ordered,在重写的filter方法中编写逻辑需求,我这里是开头为 /1comsumer/ 的请求需要登录,返回了一个字符串。
·
一、配置gateway
1、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2、配置
spring.cloud.gateway.discovery.locator.enabled=true
spring.cloud.gateway.discovery.locator.lower-case-service-id=true
#请求为 /comsumer/ 开头的发送到http://localhost:8082服务器端口
spring.cloud.gateway.routes[0].id=route_1
spring.cloud.gateway.routes[0].uri=http://localhost:8082
spring.cloud.gateway.routes[0].predicates=Path=/comsumer/**
spring.cloud.gateway.routes[0].filters=StripPrefix=1
#请求为 /1comsumer/ 开头的发送到http://localhost:8084服务器端口
spring.cloud.gateway.routes[1].id=route_2
spring.cloud.gateway.routes[1].uri=http://localhost:8084
spring.cloud.gateway.routes[1].predicates=Path=/1comsumer/**
spring.cloud.gateway.routes[1].filters=StripPrefix=1
这里可以配置多个网关,我在这里配置了两个,通过数组下标的方式对每一个网关进行配置
3、编码
先创建一个类继承GlobalFilter和Ordered,在重写的filter方法中编写逻辑需求,我这里是开头为 /1comsumer/ 的请求需要登录,返回了一个字符串
@Component
public class GatewayFilter implements GlobalFilter, Ordered {
private Logger logger= LoggerFactory.getLogger(getClass());
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
logger.info("GatewayFilter filter start");
ServerHttpRequest request = exchange.getRequest();
ServerHttpResponse response = exchange.getResponse();
RequestPath path = request.getPath();
String uristr = path.toString();
if(uristr.startsWith("/comsumer")){
JSONObject message = new JSONObject();
message.put("data","需要登录");
byte[] bits = message.toJSONString().getBytes(StandardCharsets.UTF_8);
DataBuffer buffer = response.bufferFactory().wrap(bits);
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().add("Content-Type","text/plain;charset=utf-8");
return response.writeWith(Mono.just(buffer));
}
return chain.filter(exchange);
}
@Override
public int getOrder() {
return 0;
}
}
二、配置hystrix
1、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
2、配置
feign.circuitbreaker.enabled=true
3、编写一个类继承FallbackFactory<需要熔断的fegin类>
@Component
public class FallBack implements FallbackFactory<CategoryFeign> {
@Override
public CategoryFeign create(Throwable cause) {
return new CategoryFeign() {
@Override
public ResponseMessage getAllCategory() {
ResponseMessage responseMessage = new ResponseMessage ();
responseMessage.setCode("500");
responseMessage.setMsg("出错了");
return responseMessage;
}
};
}
}
在需要熔断的fegin类的注解上添加 fallbackFactory = 实现熔断的类的类名.class
@FeignClient(name = "SpringCloudProvider",contextId = "CategoryFeign",fallbackFactory = FallBack.class)
public interface CategoryFeign extends CategoryService {
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)