fizz 2.0 重构了插件机制,使插件功能及用法与 org.springframework.web.server.WebFilter 一致,新机制兼容旧插件,但新插件的开发应基于新机制。

新插件开发,在插件定义、配置、应用方面与旧的一样,区别在于 gateway 新设计

public interface FizzPluginFilter {

    public Mono<Void> filter(ServerWebExchange exchange, Map<String, Object> config);

}

类似 WebFilter,新插件实现此接口即可,如:

public class MyPlugin implements FizzPluginFilter {
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, Map<String, Object> config) {
        String fixedConfig = config.get(PluginConfig.FIXED_CONFIG); // 获取插件的固定配置
        doSomething(); // 执行一些逻辑
        exchange.getAttributes().put("11", "22"); // 往后续插件或逻辑传递参数
        Mono next = FizzPluginFilterChain.next(exchange); // 执行下一个插件或后续逻辑
        return next.defaultIfEmpty(ReactorUtils.NULL).flatMap(
            nil -> {
                doAfterNext(); // 当 next 完成时执行一些逻辑
                return Mono.empty();
            }
        );
    }
    
    public void doSomething() {
    }
    
    public void doAfterNext() {
    }
}
上次更新: 2021-6-9 12:26