6.19_JAVA_微服务

1、跑后端的时候要把数据库跑起来,否则会报错。

2、predicate断言:

预言:predict

3、gateway:出路口

4、API:List.of("a", "b", "c");把abc编程一个集合。

5、

6、shortcutFieldOrder定义了yaml的顺序:

7、思考以下问题,为什么PrintAnyGatewayFilterFactory类没有直接调用getConfigClass类,却保留了下来?

答案:因为它们是通过Spring Cloud Gateway 框架内部机制 完成的

java 复制代码
@Component
public class PrintAnyGatewayFilterFactory // 父类泛型是内部类的Config类型
                extends AbstractGatewayFilterFactory<PrintAnyGatewayFilterFactory.Config> {

    @Override
    public GatewayFilter apply(Config config) {
        // OrderedGatewayFilter是GatewayFilter的子类,包含两个参数:
        // - GatewayFilter:过滤器
        // - int order值:值越小,过滤器执行优先级越高
        return new OrderedGatewayFilter(new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                // 获取config值
                String a = config.getA();
                String b = config.getB();
                String c = config.getC();
                // 编写过滤器逻辑
                System.out.println("a = " + a);
                System.out.println("b = " + b);
                System.out.println("c = " + c);
                // 放行
                return chain.filter(exchange);
            }
        }, 100);
    }

    // 自定义配置属性,成员变量名称很重要,下面会用到
    @Data
    static class Config{
        private String a;
        private String b;
        private String c;
    }
    // 将变量名称依次返回,顺序很重要,将来读取参数时需要按顺序获取
    @Override
    public List<String> shortcutFieldOrder() {
        return List.of("a", "b", "c");
    }
        // 返回当前配置类的类型,也就是内部的Config
    @Override
    public Class<Config> getConfigClass() {
        return Config.class;
    }

}

8、这是个啥?

GatewayFilter 是一个 接口(Interface) ,正常情况下接口不能直接 new,必须提供实现类。
但通过 匿名内部类 ,你可以 直接实现接口的方法 ,而不用单独写一个类文件。

相当于是:GatewayFilterEntity gatewayFilterEntity

9、ServerWebExchange exchange包含:exchange.getRequest()、exchange.getResponse()、exchange.getAttributes()、exchange.mutate()

java 复制代码
(exchange, chain) -> {                     //例
    // 示例1:获取请求头
    String token = exchange.getRequest().getHeaders().getFirst("Authorization");
    
    // 示例2:修改请求路径
    ServerWebExchange newExchange = exchange.mutate()
        .request(builder -> builder.path("/new-path"))
        .build();
    
    // 示例3:拦截请求(直接返回响应)
    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
    return exchange.getResponse().setComplete();
}

10、exchange更偏向功能类。chain更多是用来链接多个要过滤的内容,比如过滤掉1、2、3、4、5就需要chain链接起来。

11、

java 复制代码
//全局生效:放在gateway底下:
spring:
  cloud:
    gateway:
      default-filters:
        - PrintAny=1,2,3  # 全局生效
      routes:
        - id: item
          uri: lb://item-service
          predicates:
            - Path=/items/**                  */
        - id: cart
          uri: lb://cart-service
          predicates:
            - Path=/carts/**                  */



//局部生效:放在id底下:
spring:
  cloud:
    gateway:
      routes:
        - id: item
          uri: lb://item-service
          predicates:
            - Path=/items/**                   */
          filters:
            - PrintAny=1,2,3  # 仅对/item路由生效
        - id: cart
          uri: lb://cart-service
          predicates:
            - Path=/carts/**                   

12、default-filters版的GateFilter和GlobalFilter有啥区别?

13、J WT(JSON Web Token):登录时候需要

相关推荐
金銀銅鐵27 分钟前
[Java] 用 CLI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
Nuanyt1 小时前
Hot 100 刷题笔记 · 数组与哈希专题(3 题)
java·笔记·算法·leetcode·哈希算法·1024程序员节
xieliyu.1 小时前
【JavaEE进阶】Spring Boot 日志:从 System.out 到 @Slf4j,6 个级别 + 4 类配置一篇讲透
java·spring boot·spring·java-ee·springboot·logback·slf4j
IT_Octopus2 小时前
Apollo 配置中心入门:一所“小学校“读懂 Portal、Meta Server、Config Service
java·后端·spring
cfm_29142 小时前
偏向锁的Epoch优化机制
java
CRMEB系统商城2 小时前
家电零售的供应商协同与物流提效
java·开发语言·人工智能·小程序·1024程序员节
jason.zeng@15022072 小时前
Nginx 配置详解(静态 HTML、下载目录、API 反向代理三套场景)
java·vue.js·1024程序员节
鬼手点金2 小时前
从 API 消息到模型 Token:Chat Template
java·前端·javascript·数据库·人工智能·深度学习·1024程序员节
Shadow(⊙o⊙)2 小时前
LangChain 自定义工具全解析:从 @tool 到 bind_tools 的完整调用链路
java·服务器·前端·1024程序员节
王大师王文峰2 小时前
Java+AI 面试题(二):业务场景设计 10 例【客服机器人、合同审查、Text2SQL、告警降噪、成本优化】场景题答法与追问链路
java·开发语言·人工智能