webflux中操作符调试

简介: webflux中操作符调试

生命不息,奋斗不止。——卡莱尔

分享一个小技巧,在webflux开发中,我们可以在主启动类上加这么一行代码:

Hooks.onOperatorDebug();

这行代码的用处是注册一个回调函数,可以打印操作符信息,举个例子:

import reactor.core.publisher.Flux;
import reactor.core.publisher.Hooks;
public class DebugExample {
    public static void main(String[] args) {
        Hooks.onOperatorDebug(); // 启用操作符调试
        Flux<Integer> flux = Flux.just(1, 2, 3, 4)
                .map(i -> i / 0); // 这里会触发除以零的异常
        flux.subscribe(
                value -> System.out.println("Received: " + value),
                error -> System.err.println("Error: " + error)
        );
    }
}

如果我们没有注册,则堆栈打印信息:

Received: 1
Received: 2
Received: 3
Exception in thread "main" java.lang.ArithmeticException: / by zero
  at DebugExample.lambda$main$0(DebugExample.java:12)
  at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:120)
  at reactor.core.publisher.FluxJust$WeakScalarSubscription.request(FluxJust.java:91)
  at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:155)
  at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:1266)
  at reactor.core.publisher.FluxMap.onSubscribe(FluxMap.java:59)
  at reactor.core.publisher.FluxJust.subscribe(FluxJust.java:68)
  at reactor.core.publisher.FluxMap.subscribe(FluxMap.java:44)
  at reactor.core.publisher.Flux.subscribe(Flux.java:9117)
  at reactor.core.publisher.Flux.subscribe(Flux.java:9091)
  at DebugExample.main(DebugExample.java:14)

注册以后:

Received: 1
Received: 2
Received: 3
Error: java.lang.ArithmeticException: / by zero
  at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
  Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
    | onSubscribe([Synchronous Fuseable] FluxMapFuseable.MapFuseableSubscriber)
    |   Flux.map(Map.java:95)
    |   Flux.map(Map.java:92)
    |   DebugExample.main(DebugExample.java:15)
    | onAssembly(FluxMapFuseable)
    |   Flux.map(Map.java:95)
    |   Flux.map(Map.java:92)
    |   DebugExample.main(DebugExample.java:15)
    | request(unbounded)
    at reactor.core.publisher.FluxOnAssembly.onAssembly(FluxOnAssembly.java:482)
    at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:64)
    at reactor.core.publisher.Flux.subscribe(Flux.java:9065)
    at reactor.core.publisher.Flux.subscribe(Flux.java:9039)
    at DebugExample.main(DebugExample.java:14)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    Suppressed: java.lang.ArithmeticException: / by zero
      at reactor.core.publisher.Operators.onErrorDropped(Operators.java:197)
    at reactor.core.publisher.FluxOnAssembly.onAssembly(FluxOnAssembly.java:482)
    at reactor.core.publisher.FluxMapFuseable.subscribe(FluxMapFuseable.java:64)
    at reactor.core.publisher.Flux.subscribe(Flux.java:9065)
    at reactor.core.publisher.Flux.subscribe(Flux.java:9039)
    at DebugExample.main(DebugExample.java:14)
目录
打赏
0
0
0
0
29
分享
相关文章
JavaSE——运算符、运算符优先级、API、Scanner
JavaSE——运算符、运算符优先级、API、Scanner
55 0
常用标签调用代码
这段内容介绍了DedeCMS内容管理系统中常用的标签调用代码,涵盖网站标题、描述、导航、文章列表及详情、SEO优化等多个方面。通过这些标签,用户可以轻松实现如网站首页标题和描述的调用、文章标题与内容展示、栏目导航生成、分页功能实现等功能,帮助网站开发者快速构建和管理网站内容。
78 0
|
10月前
|
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
Java项目调试实战:如何高效调试Spring Boot项目中的GET请求,并通过equalsIgnoreCase()解决大小写不一致问题
147 0
MyBatis中的9种常用动态sql标签精妙用法
MyBatis中的9种常用动态sql标签精妙用法
293 0
|
10月前
webflux中操作符调试
webflux中操作符调试
85 0
|
10月前
|
演示spring AOP的切入表达式重用和优先级问题以及怎么实现基于xml的AOP
演示spring AOP的切入表达式重用和优先级问题以及怎么实现基于xml的AOP
84 0
Spring判断方法名是符合给定的SPEL+表达式的+API
Spring判断方法名是符合给定的SPEL+表达式的+API
98 0
SpEL(Spring表达语言)表达式详述
SpEL全称是Spring Expression Language是一种强大的表达式语言。在Spring产品组合中,它是表达式计算的基础。它支持在运行时查询和操作对象图,它可以与基于XML和基于注解的Spring配置还有bean定义一起使用。由于它能够在运行时动态分配值,因此可以为我们节省大量Java代码。
138 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等