Skip to main content
info

You're seeing the release note of an old version. Check out the latest release note.

v0.99.6

May 28, 2020

🌟 New features

  • New CircuitBreakerRule and CircuitBreakerRuleWithContent API let you define a complex circuit breaking policy conveniently. #2726

    CircuitBreakerRule myRule =
    CircuitBreakerRule.of(
    // A failure if an Exception is raised.
    CircuitBreakerRule.onException(),
    // Neither a success nor a failure because
    // the request has not been handled by the server.
    CircuitBreakerRule.builder()
    .onUnprocessed()
    .thenIgnore(),
    // A failure if the response is 5xx.
    CircuitBreakerRule.onServerErrorStatus(),
    // A success if the response is 2xx.
    CircuitBreakerRule.builder()
    .onStatusClass(HttpStatusClass.SUCCESS)
    .thenSuccess(),
    // Neither a success nor a failure. Do not take this response into account.
    CircuitBreakerRule.builder().thenIgnore());
  • You can now easily bind an MDC property to a RequestContext and log it using a logging framework. #2634 #2724 #2729

    MDC.put("transactionId", "1234");
    WebClient client = ...;
    try (SafeCloseable ignored = Clients.withContextCustomizer(ctx -> {
    RequestScopedMdc.copy(ctx, "transactionId");
    }) {
    assert MDC.get("transactionId").equals("1234");

    client.execute(...);
    }
  • You can now install a custom hook to RequestContextStorage in runtime, usually at startup time. #2723

    RequestContextStorage.hook(delegate -> new RequestContextStorageWrapper(delegate) {
    @Nullable
    @Override
    public <T extends RequestContext> T push(RequestContext toPush) {
    // Usually, you can just use RequestScopedMdc for this purpose.
    MDC.put("foo", toPush.attr(FOO));
    return super.push(toPush);
    }

    @Override
    public void pop(RequestContext current, @Nullable RequestContext toRestore) {
    MDC.remove("foo");
    super.pop(current, toRestore);
    }

    ...
    }
  • You can now set method parameter descriptions for annotated services in DocService using Javadoc. #2697

  • You can now easily sanitize headers and content using RegexBasedSanitizer. #1810 #2721

📈 Improvements

🛠️ Bug fixes

  • You can now use Armeria 0.99.6 with Micrometer 1.3.9. (It is recommended to use Micrometer 1.5.1, though.) #2742
  • You can now retry even when the current EndpointGroup is empty. #2736
  • You can send a request by setting the authority and scheme header to RequestHeaders. #2730 #2734
  • You no longer see &lt;zero-length response&gt; in DocService anymore. #2732
  • A NullPointerException is not raised anymore due to the dependency order when Armeria is shaded. #2731 #2735

☢️ Breaking changes

⛓ Dependencies

  • Brave 5.11.2 → 5.12.3
  • grpc-kotlin-stub 0.1.1 → 0.1.2
  • io.dropwizard.metrics 4.1.7 → 4.1.9
  • Jetty 9.4.28.v20200408 → 9.4.29.v20200521
  • reactor-grpc 1.0.0 → 1.0.1
  • Retrofit 2.8.1 → 2.9.0
  • Rxjava3 3.0.3 → 3.0.4
  • Shaded dependencies
    • Caffeine 2.8.2 → 2.8.4
  • Example dependencies
    • Kotlin 1.3.71 → 1.3.72
    • Kotlin Coroutines 1.3.6 → 1.3.7

🙇 Thank you

This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:

@amitvc@KarboniteKream@ikhoon@trustin@anuraaga@okue@imasahiro@matsumana@hueneburg@andrey-tpt@minwoox@codefromthecrypt@jrhee17

Like Armeria?
Star us ⭐️

×