/** * Creates a new instance of {@link BulkheadExports} with default metrics names prefix and * {@link BulkheadRegistry} as a source of bulkheads. * @param bulkheadRegistry the registry of bulkheads */ public static BulkheadExports ofBulkheadRegistry(BulkheadRegistry bulkheadRegistry) { return new BulkheadExports(bulkheadRegistry.getAllBulkheads()); }
@Test public void shouldRegisterMetrics() { BulkheadRegistry bulkheadRegistry = BulkheadRegistry.ofDefaults(); bulkheadRegistry.bulkhead("testName"); BulkheadMetrics bulkheadMetrics = BulkheadMetrics.ofBulkheadRegistry(bulkheadRegistry); bulkheadMetrics.bindTo(meterRegistry); final List<String> metricNames = meterRegistry.getMeters() .stream() .map(Meter::getId) .map(Meter.Id::getName) .collect(Collectors.toList()); final List<String> expectedMetrics = newArrayList( "resilience4j.bulkhead.testName.available_concurrent_calls"); assertThat(metricNames).hasSameElementsAs(expectedMetrics); }
@Test public void shouldReturnCustomConfig() { // give BulkheadRegistry registry = BulkheadRegistry.of(config); // when BulkheadConfig bulkheadConfig = registry.getDefaultBulkheadConfig(); // then assertThat(bulkheadConfig).isSameAs(config); }
@Test public void shouldBeNotTheSameInstance() { Bulkhead bulkhead1 = registry.bulkhead("test1"); Bulkhead bulkhead2 = registry.bulkhead("test2"); assertThat(bulkhead1).isNotSameAs(bulkhead2); assertThat(registry.getAllBulkheads()).hasSize(2); }
@Test public void shouldUseCustomPrefix() throws Throwable { BulkheadRegistry bulkheadRegistry = BulkheadRegistry.ofDefaults(); Bulkhead bulkhead = bulkheadRegistry.bulkhead("testBulkhead"); metricRegistry.registerAll(BulkheadMetrics.ofIterable("testPre", bulkheadRegistry.getAllBulkheads()));
@Test public void shouldReturnTheCorrectName() { Bulkhead bulkhead = registry.bulkhead("test"); assertThat(bulkhead).isNotNull(); assertThat(bulkhead.getName()).isEqualTo("test"); assertThat(bulkhead.getBulkheadConfig().getMaxConcurrentCalls()).isEqualTo(25); assertThat(bulkhead.getMetrics().getAvailableConcurrentCalls()).isEqualTo(25); }
@Before public void setUp() { // registry with default config registry = BulkheadRegistry.ofDefaults(); // registry with custom config config = BulkheadConfig.custom() .maxConcurrentCalls(100) .maxWaitTime(50) .build(); }
@Test public void shouldBeTheSameInstance() { Bulkhead bulkhead1 = registry.bulkhead("test", config); Bulkhead bulkhead2 = registry.bulkhead("test", config); assertThat(bulkhead1).isSameAs(bulkhead2); assertThat(registry.getAllBulkheads()).hasSize(1); }
io.github.resilience4j.bulkhead.Bulkhead bulkhead; if (bulkheadConfig.getDefaults()) { bulkhead = bulkheadRegistry.bulkhead(name); } else { bulkhead = bulkheadRegistry.bulkhead(name, BulkheadConfig.custom() .maxConcurrentCalls(bulkheadConfig.getMaxConcurrentCalls()) .maxWaitTime(bulkheadConfig.getMaxWaitTime())
OptionalBinder.newOptionalBinder(binder(), RateLimiterRegistry.class).setDefault().toInstance(RateLimiterRegistry.ofDefaults()); OptionalBinder.newOptionalBinder(binder(), RetryRegistry.class).setDefault().toInstance(RetryRegistry.ofDefaults()); OptionalBinder.newOptionalBinder(binder(), BulkheadRegistry.class).setDefault().toInstance(BulkheadRegistry.ofDefaults());
/** * Creates a new instance BulkheadMetrics {@link BulkheadMetrics} with specified metrics names prefix and * a {@link BulkheadRegistry} as a source. * * @param prefix the prefix of metrics names * @param bulkheadRegistry the registry of bulkheads */ public static BulkheadMetrics ofBulkheadRegistry(String prefix, BulkheadRegistry bulkheadRegistry) { return new BulkheadMetrics(prefix, bulkheadRegistry.getAllBulkheads()); }
RecoveryFunction<?> recoveryFunction = annotation.recovery().newInstance(); if (registry == null) { registry = BulkheadRegistry.ofDefaults(); io.github.resilience4j.bulkhead.Bulkhead bulkhead = registry.bulkhead(annotation.name()); if (bulkhead == null) { return invocation.proceed();
io.github.resilience4j.bulkhead.Bulkhead bulkhead; if (bulkheadConfig.getDefaults()) { bulkhead = bulkheadRegistry.bulkhead(name); } else { bulkhead = bulkheadRegistry.bulkhead(name, BulkheadConfig.custom() .maxConcurrentCalls(bulkheadConfig.getMaxConcurrentCalls()) .maxWaitTime(bulkheadConfig.getMaxWaitTime())
OptionalBinder.newOptionalBinder(binder(), RateLimiterRegistry.class).setDefault().toInstance(RateLimiterRegistry.ofDefaults()); OptionalBinder.newOptionalBinder(binder(), RetryRegistry.class).setDefault().toInstance(RetryRegistry.ofDefaults()); OptionalBinder.newOptionalBinder(binder(), BulkheadRegistry.class).setDefault().toInstance(BulkheadRegistry.ofDefaults());
/** * Creates a new instance BulkheadMetrics {@link BulkheadMetrics} with * a {@link BulkheadRegistry} as a source. * * @param bulkheadRegistry the registry of bulkheads */ public static BulkheadMetrics ofBulkheadRegistry(BulkheadRegistry bulkheadRegistry) { return new BulkheadMetrics(bulkheadRegistry.getAllBulkheads()); }
@Test public void shouldRegisterMetrics() throws Throwable { BulkheadRegistry bulkheadRegistry = BulkheadRegistry.ofDefaults(); Bulkhead bulkhead = bulkheadRegistry.bulkhead("testBulkhead"); metricRegistry.registerAll(BulkheadMetrics.ofBulkhead(bulkhead));
/** * Creates a new instance BulkheadMetrics {@link BulkheadMetrics} with * a {@link BulkheadRegistry} as a source. * * @param bulkheadRegistry the registry of bulkheads */ public static BulkheadMetrics ofBulkheadRegistry(BulkheadRegistry bulkheadRegistry) { return new BulkheadMetrics(bulkheadRegistry.getAllBulkheads()); }
RecoveryFunction<?> recoveryFunction = annotation.recovery().newInstance(); if (registry == null) { registry = BulkheadRegistry.ofDefaults(); io.github.resilience4j.bulkhead.Bulkhead bulkhead = registry.bulkhead(annotation.name()); if (bulkhead == null) { return invocation.proceed();
); chain1.get("stream/events", ctx -> { Seq<Flux<BulkheadEvent>> eventStreams = bulkheadRegistry.getAllBulkheads().map(bulkhead -> ReactorAdapter.toFlux(bulkhead.getEventPublisher())); Function<BulkheadEvent, String> data = b -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(BulkheadEventDTO.createEventDTO(b)); ServerSentEvents events = ServerSentEvents.serverSentEvents(Flux.merge(eventStreams), e -> e.id(BulkheadEvent::getBulkheadName).event(c -> c.getEventType().name()).data(data)); chain1.get("stream/events/:name", ctx -> { String bulkheadName = ctx.getPathTokens().get("name"); Bulkhead bulkhead = bulkheadRegistry.getAllBulkheads().find(b -> b.getName().equals(bulkheadName)) .getOrElseThrow(() -> new IllegalArgumentException(String.format("bulkhead with name %s not found", bulkheadName))); Function<BulkheadEvent, String> data = b -> Jackson.getObjectWriter(chain1.getRegistry()).writeValueAsString(BulkheadEventDTO.createEventDTO(b)); String bulkheadName = ctx.getPathTokens().get("name"); String eventType = ctx.getPathTokens().get("type"); Bulkhead bulkhead = bulkheadRegistry.getAllBulkheads().find(b -> b.getName().equals(bulkheadName)) .getOrElseThrow(() -> new IllegalArgumentException(String.format("bulkhead with name %s not found", bulkheadName))); Flux<BulkheadEvent> eventStream = ReactorAdapter.toFlux(bulkhead.getEventPublisher())
/** * Creates a new instance BulkheadMetrics {@link BulkheadMetrics} with specified metrics names prefix and * a {@link BulkheadRegistry} as a source. * * @param prefix the prefix of metrics names * @param bulkheadRegistry the registry of bulkheads */ public static BulkheadMetrics ofBulkheadRegistry(String prefix, BulkheadRegistry bulkheadRegistry) { return new BulkheadMetrics(prefix, bulkheadRegistry.getAllBulkheads()); }