持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
今天分享SpringCloudAlibaba gateway网关的基础知识。
SpringCloudAlibaba gateway作用:
可以实现用户的验证登陆、解决跨域、日志拦截、权限控制、限流熔断、负载均衡、黑名单和白名单机制等。
过滤器与网关gateway有哪些区别?
过滤器适合单个服务实现过滤请求。
网关拦截整合微服务实现过滤请求,解决整个微服务中冗余代码。
zuul与网关gateway有哪些区别?
zuul网关属于netfix公司产品,属于第一代微服务网关
gateway属于springcloud自己研发的网关框架,属于第二代微服务网关
gateway比zuul网关的性能要好
zuul网关底层基于servlet实现,阻塞式api,不支持长链接,依赖于springboot-web
gateway基于spring5构建,能够实现响应式非阻塞api,支持长链接,更好地支持spring体系产品,依赖于springboot-webflux
网关的端口号一般是:80
网关gateway与nginx的区别?
网关能够做的事情,nginx也可以实现
相同点:都可以实现api的拦截,负载均衡,反向代理,请求过滤
不同点:
nginx采用C语言
在微服务领域中每个编程语言都有。gateway是用java语言写的。
毕竟gateway属于java语言编写,能够更好的对我们的微服务实现扩展功能。
gateway自定义全局过滤 实现GlobalFilter接口,重写filter方法,获取请求中是否存在token,进行全局过滤
@Component
public class TokenFIlter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//如何获取参数
String token = exchange.getRequest().getQueryParams().getFirst("token");
if(StringUtils.isEmpty(token)){
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
String msg = "token is not null";
DataBuffer wrap = response.bufferFactory().wrap(msg.getBytes());
return response.writeWith(Mono.just(wrap));
}
//直接转发到真实服务
return chain.filter(exchange);
}
}
如果网关宕机了,会出现什么情况?
导致所整个微服务无法通讯。网关需要实现集群
网关实现集群怎么访问?
基于nginx实现集群。
服务获取网关的ip+端口,在网关中重写端口。
网关中重写端口,放入端口号,就可以分发到相对应的服务节点了。
// 在请求头中存放serverPort serverPort
ServerHttpRequest request = exchange.getRequest().mutate().header("serverPort", serverPort).build();
return chain.filter(exchange.mutate().request(request).build());