1.22.0 release notes

9th February 2023

🌟 New features

  • CircuitBreakerClient integration with Resilience4j's circuit breaker is now available. #1469 #4139

    • Note that armeria-resilience4j2 requires Java 17 or higher.
    Resilience4jCircuitBreakerMapping mapping =
      Resilience4jCircuitBreakerMapping.of();
    WebClient client = WebClient
      .builder()
      .decorator(CircuitBreakerClient
        .builder(CircuitBreakerRule.onException())
        .handler(Resilience4JCircuitBreakerClientHandler.of(mapping)) // 👈👈👈
        .newDecorator())
      ...
  • You can now use AsyncServerInterceptor to asynchronously intercept gRPC service calls. #4647

    class AuthServerInterceptor implements AsyncServerInterceptor {
      @Override
      <I, O> CompletableFuture<Listener<I>> asyncInterceptCall(
            ServerCall<I, O> call, Metadata headers, ServerCallHandler<I, O> next) {
        return authorizer.authorize(headers).thenApply(result -> {
          if (result) {
            return next.startCall(call, headers);
          } else {
            throw new AuthenticationException("Invalid access");
          }
        });
      }
    }
    
    GrpcService.builder()
               .intercept(new AuthServerInterceptor()) // 👈👈👈
               .addService(...)
               ...
  • @Blocking annotation can now be used with gRPC services. #4389 #4585

    @Blocking // 👈👈👈 applies to all methods in the class
    class MyGrpcServiceImpl extends MyGrpcServiceImplBase {
      @Blocking // 👈👈👈 applies to a single method
      public void blockingCall(...) {
        ...
      }
    }
  • Armeria server with Spring integration can now be configured to bind to non-ip addresses. #4597 #4598

  • The authenticated remote user set by RequestLogBuilder.authenticatedUser() is now logged in access logs. #4634

  • DocService now exposes JSON Schema via the /schemas.json endpoint. #4518

📈 Improvements

🛠️ Bug fixes

🏚️ Deprecations

  • ArmeriaSettings.ports.ip is deprecated in favor of ArmeriaSettings.ports.address. #4597 #4598

☢️ Breaking changes

  • Armeria's gRPC services now try to throw a StatusRuntimeException instead of a StatusException. #4658
    • Note that users are still recommended to perform error handling for both StatusRuntimeException and StatusException for gRPC services.
  • We are planning on stopping support for integration with Spring Boot 1. Please join the discussion at our Github issue if you have any opinions. #4651

⛓ Dependencies

  • Brave 5.14.1 → 5.15.0
  • Dropwizard-metrics 4.2.13 → 4.2.15
  • GraphQL Kotlin 6.3.2 → 6.3.5
  • gRPC Java 1.49.1 → 1.52.1
  • Hibernate Validator 6.2.3.Final → 6.2.5.Final
  • Jackson 2.14.1 → 2.14.2
  • java-jwt 4.2.1 → 4.2.2
  • Kafka client 3.3.1 → 3.4.0
  • Kotlin 1.7.22 → 1.8.10
  • Micrometer 1.10.2 → 1.10.3
  • Netty 4.1.86.Final → 4.1.87.Final
  • io_uring 0.0.16.Final → 0.0.17.Final
  • Protobuf 3.21.1 → 3.21.7
  • Resteasy 5.0.4.Final → 5.0.5.Final
  • RxJava3 3.1.5 → 3.1.6
  • Sangria 3.4.1 → 3.5.0
  • Scala3 3.2.0 → 3.2.2
  • ScalaPB 0.11.12 → 0.11.13
  • ScalaPB JSON 0.12.0 → 0.12.1
  • Spring 5.3.23 → 5.3.25
  • Spring Boot 2.7.4 → 2.7.8
  • Tomcat8 8.5.84 → 8.5.85
  • Tomcat9 9.0.70 → 9.0.71

🙇 Thank you