熟悉 Completable 响应式接口
Solon-Rx(约2Kb)是基于 reactive-streams 封装的 RxJava 极简版(约 2Mb 左右)。目前仅一个接口 Completable,意为:可完成的发布者。
使用场景及接口:
接口 | 说明 |
---|---|
Completable | 作为返回类型 |
Completable::complete() | 构建完成发布者 |
Completable::error(cause) | 构建异常发布者 |
Completable::create((emitter)->{...}) | 构建发射器发布者 |
1、作为返回类型(主要用于过滤器)
@FunctionalInterface
public interface ExFilter {
/**
* 过滤
*
* @param ctx 交换上下文
* @param chain 过滤链
*/
Completable doFilter(ExContext ctx, ExFilterChain chain);
}
2、构建返回对象(即,发布者)
@Component
public class CloudGatewayFilterImpl implements CloudGatewayFilter {
@Override
public Completable doFilter(ExContext ctx, ExFilterChain chain) {
String token = ctx.rawHeader("TOKEN");
if (token == null) {
ctx.newResponse().status(401);
return Completable.complete();
}
return chain.doFilter(ctx);
}
}
3、构建可发射控制的返回对象(比如做全局异常过滤)
@Component(index = -99)
public class CloudGatewayFilterImpl implements CloudGatewayFilter {
@Override
public Completable doFilter(ExContext ctx, ExFilterChain chain) {
return Completable.create(emitter -> {
//订阅链路过滤的
chain.doFilter(ctx).subscribe(new CompletableSubscriber() {
@Override
public void onError(Throwable e) {
ctx.newResponse().status(500);
emitter.onComplete();
}
@Override
public void onComplete() {
emitter.onComplete();
}
});
});
}
}