@Override
    public <T> Mono<T> run(final Mono<T> toRun, final Function<Throwable, Mono<T>> fallback, final Resilience4JConf conf) {
        RateLimiter rateLimiter = Resilience4JRegistryFactory.rateLimiter(conf.getId(), conf.getRateLimiterConfig());
        Mono<T> to = toRun.transformDeferred(RateLimiterOperator.of(rateLimiter));

        return Optional.ofNullable(fallback)
                .map(to::onErrorResume)
                .orElse(to);
    }
@Test
    public void errorTest() {
        Resilience4JConf conf = mock(Resilience4JConf.class);
        when(conf.getId()).thenReturn("SHENYU");
        when(conf.getRateLimiterConfig()).thenReturn(RateLimiterConfig.ofDefaults());
        StepVerifier.create(ratelimiterExecutor.run(Mono.error(new RuntimeException()), Mono::error, conf))
                .expectSubscription()
                .expectError(RuntimeException.class)
                .verify();
    }