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(); BlockingWebClient client = WebClient .builder() .decorator(CircuitBreakerClient .builder(CircuitBreakerRule.onException()) .handler(Resilience4JCircuitBreakerClientHandler.of(mapping)) // 👈👈👈 .newDecorator()) ...
- Note that
You can now use
AsyncServerInterceptor
to asynchronously intercept gRPC service calls. #4647class 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. #4634DocService
now exposes JSON Schema via the/schemas.json
endpoint. #4518
📈 Improvements
Server.reconfigure()
now dynamically updates TLS configurations correctly. #4637- Thrift typedefs are
now correctly displayed in
DocService
. #4628 DocService
front-end assets are now compressed using gzip instead of Brotli. #4616- An exception is raised if TLS is set for a port-based virtual host. #4588
🛠️ Bug fixes
- A
NullPointerException
is not raised anymore when an abortedStreamMessage
is collected. #4652 - A
ClosedSessionException
is not set toRequestLog.responseCause()
anymore when an HTTP/1 connection is closed after response data has been fully sent. #4632 - gRPC HTTP/JSON transcoding now doesn't throw an exception when used with nested messages. #4631 #4641
431 Request Header Fields Too Large
is now returned instead of400 Bad Request
if the header size exceedsServerConfig.http1MaxHeaderSize()
. #4609 #4655- Warnings on duplicate parameters in
DocService
are no longer visible when annotations are added to Kotlin data classes. #4645 - gRPC HTTP/JSON transcoding now correctly interprets
google.protobuf.FieldMask
type as a string. #4633 #4640 - gRPC metadata is now exposed via
StatusRuntimeException
inRequestLog.responseCause()
. #4635 #4636 - Square brackets "
[]
" that are specified in path segments are correctly encoded. #4607 #4615 DecodingService
andDecodingClient
now correctly limit the max length of decompressed streaming data. #4613- Client-side gRPC callback
ClientCall.Listener.onHeaders()
is now invoked correctly. #4583 #4608 DocService
now correctly displays multiple example requests for a single endpoint. #4576 #4605
🏚️ Deprecations
☢️ Breaking changes
- Armeria's gRPC services now try to throw a
StatusRuntimeException
instead of aStatusException
. #4658- Note that users are still recommended to perform error handling for both
StatusRuntimeException
andStatusException
for gRPC services.
- Note that users are still recommended to perform error handling for both
- 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