springboot webflux 简介


springboot webflux 简介

 

官网:https://docs.spring.io/spring-boot/docs/2.3.0.RELEASE/reference/html/spring-boot-features.html#boot-features-webflux

 

**********************

简介

 

                      

基于reactor实现的异步非阻塞框架,较同步阻塞的MVC框架,可提升系统性能;

可使用MVC的注解操作,也可使用函数式编程;

支持传统的servlet容器,还可运行在支持nio的netty、undertow容器中

 

 

**********************

相关类与接口

 

ServerWebExchange:获取request、response、session

public interface ServerWebExchange {
    String LOG_ID_ATTRIBUTE = ServerWebExchange.class.getName() + ".LOG_ID";

    ServerHttpRequest getRequest();        //获取request
    ServerHttpResponse getResponse();      //获取response
    Map<String, Object> getAttributes();   //获取请求中的属性

    @Nullable
    default <T> T getAttribute(String name) {
        return this.getAttributes().get(name);
    }

    default <T> T getRequiredAttribute(String name) {
        T value = this.getAttribute(name);
        Assert.notNull(value, () -> {
            return "Required attribute '" + name + "' is missing";
        });
        return value;
    }

    default <T> T getAttributeOrDefault(String name, T defaultValue) {
        return this.getAttributes().getOrDefault(name, defaultValue);
    }

    Mono<WebSession> getSession();                 //获取webSession
    <T extends Principal> Mono<T> getPrincipal();  //获取认证用户

    Mono<MultiValueMap<String, String>> getFormData();      //获取表单参数
    Mono<MultiValueMap<String, Part>> getMultipartData();   //获取表单multipart数据

    LocaleContext getLocaleContext();              //获取国际化设置(Locale)

    @Nullable
    ApplicationContext getApplicationContext();    //获取应用上下文

    boolean isNotModified();
    boolean checkNotModified(Instant var1);
    boolean checkNotModified(String var1);
    boolean checkNotModified(@Nullable String var1, Instant var2);

    String transformUrl(String var1);
    void addUrlTransformer(Function<String, String> var1);

    String getLogPrefix();

    default ServerWebExchange.Builder mutate() {
        return new DefaultServerWebExchangeBuilder(this);
    }

    public interface Builder {           //构造ServeraWebExchange
        ServerWebExchange.Builder request(Consumer<org.springframework.http.server.reactive.ServerHttpRequest.Builder> var1);

        ServerWebExchange.Builder request(ServerHttpRequest var1);       //设置请求
        ServerWebExchange.Builder response(ServerHttpResponse var1);     //设置响应

        ServerWebExchange.Builder principal(Mono<Principal> var1);       //设置认证用户
        ServerWebExchange build();                                       //返回ServerWebExchange
    }
}

 

 

**********************

ServerHttpRequest

 

ServerHttpRequest

public interface ServerHttpRequest extends HttpRequest, ReactiveHttpInputMessage {
    String getId();

    RequestPath getPath();
    MultiValueMap<String, String> getQueryParams();
    MultiValueMap<String, HttpCookie> getCookies();

    @Nullable
    default InetSocketAddress getLocalAddress() {
        return null;
    }

    @Nullable
    default InetSocketAddress getRemoteAddress() {
        return null;
    }

    @Nullable
    default SslInfo getSslInfo() {
        return null;
    }

    default ServerHttpRequest.Builder mutate() {
        return new DefaultServerHttpRequestBuilder(this);
    }

    public interface Builder {
        ServerHttpRequest.Builder method(HttpMethod var1);
        ServerHttpRequest.Builder uri(URI var1);
        ServerHttpRequest.Builder path(String var1);
        ServerHttpRequest.Builder contextPath(String var1);

        ServerHttpRequest.Builder header(String var1, String... var2);
        ServerHttpRequest.Builder headers(Consumer<HttpHeaders> var1);

        ServerHttpRequest.Builder sslInfo(SslInfo var1);
        ServerHttpRequest build();
    }
}

 

HttpRequest

public interface HttpRequest extends HttpMessage {
    @Nullable
    default HttpMethod getMethod() {
        return HttpMethod.resolve(this.getMethodValue());  //将请求方法转换为HttpMethod
    }

    String getMethodValue();        //获取请求方法
    URI getURI();                   //获取请求uri
}

 

HttpMessage

public interface HttpMessage {
    HttpHeaders getHeaders();   //获取请求头
}

 

ReactiveHttpInputMessage

public interface ReactiveHttpInputMessage extends HttpMessage {
    Flux<DataBuffer> getBody();
}

 

 

**********************

ServerHttpResponse

 

ServerHttpResponse

public interface ServerHttpResponse extends ReactiveHttpOutputMessage {
    boolean setStatusCode(@Nullable HttpStatus var1);

    @Nullable
    HttpStatus getStatusCode();

    default boolean setRawStatusCode(@Nullable Integer value) {
        if (value == null) {
            return this.setStatusCode((HttpStatus)null);
        } else {
            HttpStatus httpStatus = HttpStatus.resolve(value);
            if (httpStatus == null) {
                throw new IllegalStateException("Unresolvable HttpStatus for general ServerHttpResponse: " + value);
            } else {
                return this.setStatusCode(httpStatus);
            }
        }
    }

    @Nullable
    default Integer getRawStatusCode() {
        HttpStatus httpStatus = this.getStatusCode();
        return httpStatus != null ? httpStatus.value() : null;
    }

    MultiValueMap<String, ResponseCookie> getCookies();
    void addCookie(ResponseCookie var1);
}

 

ReactiveHttpOutputMessage

public interface ReactiveHttpOutputMessage extends HttpMessage {
    DataBufferFactory bufferFactory();

    void beforeCommit(Supplier<? extends Mono<Void>> var1);
    boolean isCommitted();

    Mono<Void> writeWith(Publisher<? extends DataBuffer> var1);
    Mono<Void> writeAndFlushWith(Publisher<? extends Publisher<? extends DataBuffer>> var1);

    Mono<Void> setComplete();
}

 

 

**********************

WebSession

 

webSession:存储应用session数据

public interface WebSession {
    String getId();

    Map<String, Object> getAttributes();

    @Nullable
    default <T> T getAttribute(String name) {
        return this.getAttributes().get(name);
    }

    default <T> T getRequiredAttribute(String name) {
        T value = this.getAttribute(name);
        Assert.notNull(value, () -> {
            return "Required attribute '" + name + "' is missing.";
        });
        return value;
    }

    default <T> T getAttributeOrDefault(String name, T defaultValue) {
        return this.getAttributes().getOrDefault(name, defaultValue);
    }

    void start();
    boolean isStarted();

    Mono<Void> changeSessionId();

    Mono<Void> invalidate();
    Mono<Void> save();

    boolean isExpired();
    Instant getCreationTime();
    Instant getLastAccessTime();

    void setMaxIdleTime(Duration var1);
    Duration getMaxIdleTime();
}

 

 

**********************

context信息

 

LocaleContext:国际化上下文

public interface LocaleContext {
    @Nullable
    Locale getLocale();
}

 

ApplicationContext:应用上下文

public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory, HierarchicalBeanFactory, MessageSource, ApplicationEventPublisher, ResourcePatternResolver {
    @Nullable
    String getId();
    String getApplicationName();

    String getDisplayName();
    long getStartupDate();

    @Nullable
    ApplicationContext getParent();
    AutowireCapableBeanFactory getAutowireCapableBeanFactory() throws IllegalStateException;
}

 

 

**********************

函数式类与接口

 

**********************

RouterFunction

 

RouterFunction

@FunctionalInterface
public interface RouterFunction<T extends ServerResponse> {
    Mono<HandlerFunction<T>> route(ServerRequest var1);

    default RouterFunction<T> and(RouterFunction<T> other) {
        return new SameComposedRouterFunction(this, other);
    }

    default RouterFunction<?> andOther(RouterFunction<?> other) {
        return new DifferentComposedRouterFunction(this, other);
    }

    default RouterFunction<T> andRoute(RequestPredicate predicate, HandlerFunction<T> handlerFunction) {
        return this.and(RouterFunctions.route(predicate, handlerFunction));
    }

    default RouterFunction<T> andNest(RequestPredicate predicate, RouterFunction<T> routerFunction) {
        return this.and(RouterFunctions.nest(predicate, routerFunction));
    }

    default <S extends ServerResponse> RouterFunction<S> filter(HandlerFilterFunction<T, S> filterFunction) {
        return new FilteredRouterFunction(this, filterFunction);
    }

    default void accept(Visitor visitor) {
        visitor.unknown(this);
    }
}

 

RouterFunctionBuilder:构造RouterFunction

class RouterFunctionBuilder implements Builder {
    private List<RouterFunction<ServerResponse>> routerFunctions = new ArrayList();
    private List<HandlerFilterFunction<ServerResponse, ServerResponse>> filterFunctions = new ArrayList();

    RouterFunctionBuilder() {
    }

    public Builder add(RouterFunction<ServerResponse> routerFunction) {
        Assert.notNull(routerFunction, "RouterFunction must not be null");
        this.routerFunctions.add(routerFunction);
        return this;
    }

    private Builder add(RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        this.routerFunctions.add(RouterFunctions.route(predicate, handlerFunction));
        return this;
    }

    public Builder GET(String pattern, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.GET(pattern), handlerFunction);
    }

    public Builder GET(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.GET(pattern).and(predicate), handlerFunction);
    }

    public Builder HEAD(String pattern, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.HEAD(pattern), handlerFunction);
    }

    public Builder HEAD(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.HEAD(pattern).and(predicate), handlerFunction);
    }

    public Builder POST(String pattern, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.POST(pattern), handlerFunction);
    }

    public Builder POST(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.POST(pattern).and(predicate), handlerFunction);
    }

    public Builder PUT(String pattern, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.PUT(pattern), handlerFunction);
    }

    public Builder PUT(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.PUT(pattern).and(predicate), handlerFunction);
    }

    public Builder PATCH(String pattern, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.PATCH(pattern), handlerFunction);
    }

    public Builder PATCH(String pattern, RequestPredicate predicate, HandlerFunction<ServerResponse> handlerFunction) {
        return this.add(RequestPredicates.PATCH(pattern).and(predicate), handlerFunction)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值