Gateway-简单介绍使用

Gateway-简单介绍使用,第1张

微服务网关

微服务网关是整个微服务API请求的入口,可以实现日志拦截、权限控制、解决跨域问题、限流、熔断、负载均衡、黑名单与白名单拦截、授权等。

为什么需要微服务网关?
微服务中的架构模式采用前后分离,前端调用接口地址都能够被抓包分析到。
传统的方式我们可以使用过滤器拦截用户会话信息,这个过程所有的服务器都必须要写入该验证会话登陆的代码。
使用微服务网关可以统一解决这些问题和实现这些功能。

过滤器和网关的区别?
过滤器适合于单个服务实现过滤请求,局部拦截。
网关拦截整个微服务实现过滤请求,能够解决整个微服务中冗余代码,全局拦截。

Gateway

官方文档:https://docs.spring.io/spring-cloud-gateway/docs/2.2.9.RELEASE/reference/html/

Gateway和Zuul的区别

Zuul网关属于 netfix 公司开源的产品属于第一代微服务网关。
Gateway属于 SpringCloud 自研发的第二代微服务网关。
相比来说SpringCloudGateway性能比Zuul性能要好。

注意:Zuul基于Servlet实现的,阻塞式的Api, 不支持长连接,依赖于springboot-web组件。
SpringCloudGateway基于Spring5构建,能够实现响应式非阻塞式的Api,支持长连接,能够更好的整合Spring体系的产品,依赖于springboot-WebFux组件。

构建Gateway

1、新建springboot项目,引入maven依赖

 <dependency>
   <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-gatewayartifactId>
    <version>2.0.0.RELEASEversion>
dependency>

2、编写application.yml文件,配置转发策略

spring:
  application:
    name: kaico-gateway-demo

  cloud:
    gateway:
      ###路由策略
      routes:
        ###路由id
        - id: kaico
          ####转发http://www.baidu.com/
          uri: https://www.baidu.com/
          ###匹配规则
          predicates:
            - Path=/kaico/**
        
server:
  port: 80

3、启动项目即可

浏览器请求http://127.0.0.1/kaico,会转发请求到https://www.baidu.com/

整合nacos实现转发真实微服务接口

1、maven依赖增加nacos配置依赖

 <dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
   <version>0.2.2.RELEASEversion>
dependency>

2、application.yml增加路由配置

spring:
  application:
    name: kaico-gateway-demo

  cloud:
    gateway:
      discovery:
        locator:
          ####开启以服务id去注册中心上获取转发地址
          enabled: true

      ###路由策略
      routes:
        ###路由id
        - id: kaico
          ####转发http://www.baidu.com/
          uri: https://www.baidu.com/
          ###匹配规则
          predicates:
            - Path=/kaico/**

        ###路由id
        - id: member
          #### 基于lb负载均衡形式转发
          uri: lb://kaico-member
          filters:
            - StripPrefix=1
          ###匹配规则
          predicates:
            - Path=/member/**


    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 80

3、重启网关项目
浏览器请求路径:http://127.0.0.1/member/getUser,该请求会转发到 kaico-member 服务来处理。

网关和nginx的区别

相同点:都是可以实现对api接口的拦截,负载均衡、反向代理、请求过滤等,可以实现和网关一样的效果。

不同点:
Nginx采用C语言编写的,微服务都是自己语言编写的 比如Gateway就是java写的。

毕竟Gateway属于Java语言编写的, 能够更好对微服务实现扩展功能,相比Nginx如果想实现扩展功能需要结合Nginx+Lua语言等。

Nginx实现负载均衡的原理:属于服务器端负载均衡器。
Gateway实现负载均衡原理:采用本地负载均衡器的形式。

Gateway全局过滤

编写Java过滤器类:增加自己的校验规则,实现实现一些参数的拦截、登录的校验等等。
可接增加Ordered 接口来实现过滤器的排序执行。

@Component
public class TokenFilter  implements GlobalFilter , Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String token = exchange.getRequest().getQueryParams().getFirst("token");
        if (token == null || token.isEmpty()) {
            ServerHttpResponse response = exchange.getResponse();
            response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);
            String msg = "token not is null ";
            DataBuffer buffer = response.bufferFactory().wrap(msg.getBytes());
            return response.writeWith(Mono.just(buffer));
        }
        // 使用网关过滤
        return chain.filter(exchange);
    }

    //多个过滤器排序执行
    @Override
    public int getOrder() {
        return -1;
    }
}
微服务接口保证安全

接口分为内网和外网接口
外网接口 基于OATUH2.0构建开放平台 比如appid、appsocet获取accesstoken调用接口。
内网接口:都是当前内网中实现通讯,相对于来说比较安全的。

  1. 需要保证接口幂等性问题(基于Token)
  2. 接口采用安全加密传输 https协议
  3. 防止数据被篡改 md5验证签名
  4. 使用微服务网关实现Api授权认证等、黑名单白名单。
  5. 对我们的接口实现服务的保护 隔离、熔断、降级等等。

最后使用apiswagger管理我们的微服务接口。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/891856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存