栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

04.SpringCloudAlibaba-Gateway

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

04.SpringCloudAlibaba-Gateway

1.什么是微服务网关

微服务网关是整个微服务API接口的入口。

可以实现:

API接口过滤

验证登录

解决跨域

日志拦截

权限控制

限流熔断

负载均衡

黑白名单机制

2.过滤器和网关的区别

过滤器局部拦截

网关全局拦截

3.zuul网关和gateway网关区别

gateway比zuul的性能要好很多。

zuul底层基于servlet实现,阻塞式api,不支持长连接

gateway基于spring5构建,响应式非阻塞api,支持长连接

4.网关与nginx区别

相同点:都可以实现api拦截,负载均衡,反向代理,请求过滤

不同点: gateway采用java语言编写 nginx采用c语言编写

5.搭建网关

1)pom依赖


        2.1.11.RELEASE
    

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.11.RELEASE
         
    

    
        
        
            com.alibaba.cloud
            spring-cloud-alibaba-nacos-discovery
            2.1.1.RELEASE
        
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        
    

    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Greenwich.RELEASE
                pom
                import
            
            
                org.springframework.boot
                spring-boot-dependencies
                ${boot-version}
                pom
                import
            
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.1.RELEASE
                pom
                import
            
        
    

2)yml配置

server:
  port: 80
####服务网关名称
spring:
  application:
    name: demo-gateway
  cloud:
    gateway:
      ###路由策略
      routes:
        ###根据我们的服务名称查找地址实现调用
        - id: member
          ####转发 https://www.baidu.com/  http://127.0.0.1:8080/  lb://nacos-member/
          uri: lb://nacos-member/
          filters:
            - StripPrefix=1
          ###匹配规则
          predicates:
            - Path=/member
@Component
public class TokenGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono 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 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 0;
    }
}
package com.demo.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;


@Component
public class CrossOriginFilter implements GlobalFilter {

    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        HttpHeaders headers = response.getHeaders();
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST, GET, PUT, OPTIONS, DELETE, PATCH");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
        headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, "*");
        return chain.filter(exchange);

    }
}

4)启动

package com.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class AppGateWay {
    public static void main(String[] args) {
        SpringApplication.run(AppGateWay.class);
    }
}

5)测试

http://localhost/member/getUser?userId=1

6.动态网关实现

1)数据库


SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for sys_gateway
-- ----------------------------
DROP TABLE IF EXISTS `sys_gateway`;
CREATE TABLE `sys_gateway`  (
  `id` bigint(20) NOT NULL,
  `route_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `route_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `route_pattern` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `route_type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `route_url` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of sys_gateway
-- ----------------------------
INSERT INTO `sys_gateway` VALUES (1, 'member', 'member', '/member
    @RequestMapping("/synGatewayConfig")
    public String synGatewayConfig() {
        return gatewayService.loadAllLoadRoute();
    }
}

7)启动类

package com.demo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.demo.mapper")
public class AppGateWay {
    public static void main(String[] args) {
        SpringApplication.run(AppGateWay.class);
    }
}

8)测试

http://localhost/synGatewayConfig  同步网关配置

http://localhost/member/getUser?userId=1

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757454.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号