对于网关的理解-Gateway

因为在使用微服务的时候,会有多端请求。会产生以下问题:

1.客户端需要记住每一个微服务的url

2.主机端口也会直接暴露

3.每一个微服务都需要认证

4.存在跨域问题

所以网关可以解决统一访问、隐藏真实的服务器地址、网关进行统一认证、解决跨域问题、限流等问题。

所以网关只需要处理网址,基本上只需要处理配置文件和启动类

复制代码
spring:
  cloud:
    gateway:
      globalcors:
        cors-configurations:
          '[/**]': #匹配向网关发送的所有请求
            allowedOrigins: "*" #任何一个服务器都允许跨域操作
            allowedMethods:
              - POST
              - GET
              - DELETE
              - PUT

      routes:  #  路由
        - id: chessgame   #自定义路由唯一标识
          uri: lb://USER  #  网关管理的访问地址
          predicates:  #  过滤的路径(只有路径匹配了url请求,网关才会处理请求)
            - Path=/user/**
          filters:  # 可以对于url的请求进行拦截处理
            - PrefixPath=/api #所有请求到网关的路径前添加这段内容
            - StripPrefix=1 #忽略请求路径中的设定数值内容路径层级数量  #在真是使用时就关闭忽略
            #网关限流配置
#            - name: RequestRateLimiter #限流工具类的名称
#              args:
#                key-resolver: "#{@ipKeyResolver}"   # 使用 SpEL表达式按名称引用 bean
#                #每秒钟只能处理一个请求,测试效果明显
#                redis-rate-limiter.replenishRate: 1 #令牌桶每秒填充速率
#                redis-rate-limiter.burstCapacity: 1 #令牌桶总容量

将启动类发送到注册中心去

XML 复制代码
  <!--网关,与web有冲突的-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    <!--实现令牌桶-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>

使用gateway的限流工具需要进行在启动类中添加bean

java 复制代码
   /***
     * IP地址进行限流
     *@return
     */
    @Bean(name="ipKeyResolver")
    public KeyResolver userKeyResolver(){
        return new KeyResolver(){
            @Override
            public Mono<String> resolve(ServerWebExchange exchange){
                //获取远程客户端IP
                String hostName = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
                return Mono.just(hostName);
            }
        };
    }
相关推荐
IT成长日记4 小时前
【Nginx开荒攻略】Nginx虚拟主机配置:从域名、端口到IP的完整指南
linux·运维·服务器·nginx·虚拟主机
迎風吹頭髮5 小时前
UNIX下C语言编程与实践53-UNIX 共享内存控制:shmctl 函数与共享内存管理
服务器·c语言·unix
猫头虎6 小时前
如何查看局域网内IP冲突问题?如何查看局域网IP环绕问题?arp -a命令如何使用?
网络·python·网络协议·tcp/ip·开源·pandas·pip
黑马金牌编程6 小时前
Linux 服务器常见的性能调优
linux·运维·服务器·性能优化
liuyao_xianhui7 小时前
Linux_基本指令1
linux·运维·服务器
liliangcsdn8 小时前
LLM时代基于unstructured解析非结构化pdf
linux·服务器·数据分析
hello_2508 小时前
动手模拟docker网络-bridge模式
网络·docker·桥接模式
武文斌779 小时前
项目学习总结:LVGL图形参数动态变化、开发板的GDB调试、sqlite3移植、MQTT协议、心跳包
linux·开发语言·网络·arm开发·数据库·嵌入式硬件·学习
爱吃喵的鲤鱼9 小时前
仿mudou——Connection模块(连接管理)
linux·运维·服务器·开发语言·网络·c++
爱吃小胖橘9 小时前
Unity网络开发--超文本传输协议Http(1)
开发语言·网络·网络协议·http·c#·游戏引擎