Java+Webflux+Resilience4j:触发fallBack方法的方法的名称



关于带有Resilience4J的Java SpringBoot Webflux(不是Spring Cloud Circuit Breaker(的小问题。

我有以下简单的方法:

@TimeLimiter(name = "methodOne", fallbackMethod = "fallbackMethod")
public Mono<String> methodOne(@RequestParam(value = "name", defaultValue = "World") String name) {
return WebClient.builder().baseUrl("http://localhost:8081/serviceBgreeting?name=" + name).build().get().retrieve().bodyToMono(String.class);
}
@TimeLimiter(name = "methodTwo", fallbackMethod = "fallbackMethod")
public Mono<String> methodTwo(@RequestParam(value = "name", defaultValue = "World") String name) {
return WebClient.builder().baseUrl("http://localhost:8082/anotherMethodTwo?name=" + name).build().get().retrieve().bodyToMono(String.class);
}

和一个相同的被调用者fallbackMethod,由所有调用者共享,如:

public Mono<Object> fallBackMethod(Exception exception) {
System.out.println("For debug purpose, I need to know what is the exact method falling back to this fallback method");
return //the fallback thing needed;

检索methodOnemethodTwo这两个方法中哪一个实际上是此回退的触发器的最佳方法是什么?

我有一些具有这种模式的1000多个方法,所以我不能只创建1000多个回退方法。(比如方法一倒一,方法二倒二等等…,我不能(

我确信有一种聪明的方法可以获得触发回退的方法名称。

尝试了StackWalker,它只提供(fallBackMethod、invoke、fallback、lambda$reactorOnErrorResume$1、onError等(,但不提供触发fallback的方法。

请帮我一点忙。

谢谢

您可以尝试从fallbackMethod执行此操作吗我们正在收集执行调用中可用方法的列表,并通过堆栈跟踪检查最近的调用方是否存在。

Method[] methods = this.getClass().getMethods();
StackTraceElement[] stackTrace = throwable.getStackTrace();
Optional<StackTraceElement> first = Arrays.stream(stackTrace)
.filter(s -> Arrays.stream(methods).anyMatch(m -> m.getName().equalsIgnoreCase(s.getMethodName())))
.findFirst();
log.error("Method name Starts here");
first.ifPresent(System.out::println);
log.error("Method name Ends here");

这是在打印类似于的东西

in.silentsudo.webapi.services.PaymentOptionService.availablePaymentOptions(PaymentOptionService.java:36)

我们可以从这里提取方法名称。

这就是我的来电者看起来像的样子

@CircuitBreaker(
name = "payment-option-service-circuit-breaker",
fallbackMethod = "paymentOptionOnCircuitBreak"
)
public Map<String, List<PaymentOption>> availablePaymentOptions() {
...
}

相关内容

  • 没有找到相关文章

最新更新