armeria-0.76.0
New features
- Added a new module
armeria-spring-boot-webflux-autoconfigurewhich allows you to use Armeria as the web server and client implementation of Spring WebFlux. #1326- By using Armeria instead of Spring's default implementation, you get:
- Rich support for Apache Thrift and gRPC, including the fancy web console that enables you to send Thrift and gRPC requests from a web browser
- Ability to run HTTP REST service and RPC service in the same port
- Full HTTP/2 support for both server-side and client-side, including h2c (plaintext HTTP/2)
- PROXY protocol support which provides interoperability with load balancers such as HAProxy and AWS ELB
- Read the official documentation to learn how to integrate Armeria with Spring Boot and WebFlux.
- By using Armeria instead of Spring's default implementation, you get:
- Zipkin spans reported by Armeria now include 'wire send' and 'wire receive' timestamps. #1423
- Made health check port in
HttpHealthCheckedEndpointGroupcustomizable. #1431 - Added more utility methods to
EventLoopGroups. #1438 #1445 - Added
CircuitBreakerClientBuilderwhich helps you applyCircuitBreakerpattern: #1418final CircuitBreakerStrategy strategy = CircuitBreakerStrategy.onServerErrorStatus(); final HttpClient client = new HttpClientBuilder(...) .decorator(new CircuitBreakerHttpClientBuilder(strategy) .circuitBreakerMapping(CircuitBreakerMapping.ofDefault() .newDecorator()) .build(); final AggregatedHttpMessage res = client.execute(...).aggregate().join();
Improvements
- HTTP connection pool now reuses the connections slightly more efficiently. #818 #1441
- Various performance improvements #1436 #1440 #1444
- Various documentation updates #1442 #1448 #1451 #1453
Bug fixes
- Removed unnecessary dependencies from
armeria-bom.armeria-bomwill now define the versions of Armeria artifacts only. For example, previously,armeria-bomdefined the versions of Armeria's transitive dependencies such as Guava and Netty, but we do not from this release.
- Fixed a bug where Thrift one-way call responses are not sent early enough. #1368 #1455
- Fixed a bug where
:authorityheader is not set properly whenRetryingClientis used. #1433 - Fixed a bug where Armeria attempts to set an empty string to Zipkin's
Span.remoteServiceName. #1434 - Fixed a bug where SAML
KeyStoreCredentialResolverBuilderdoes not raiseFileNotFoundExceptionwhen it failed to find the specified resource. #1439 - Fixed
NullPointerExceptionraised byAbstractStreamMessageDuplicatorand its subtypes. #1446 #1449
Breaking changes
- From this release on, we distribute shaded JARs only. If you were using shaded JARs, you have to remove the
-shadedsuffix from all Armeria artifact IDs. You should not see any differences besides that because all Armeria artifacts are now distributed as shaded JARs by default. #1435 - Since we removed unnecessary dependencies from
armeria-bom, your build might fail to resolve some of your dependencies if you relied onarmeria-bomfor the version numbers of non-Armeria dependencies. KeyedChannelPoolHandlerand its subtypes have been replaced withConnectionPoolListenerand its respective subtypes. #818 #1441(Retry|CircuitBreaker)Strategyare split into(Retry|CircuitBreaker)Strategyand(Retry|CircuitBreaker)StrategyWithContent. #1418- Use
(Retry|CircuitBreaker)Stategyunless you need to retry by looking into the response content, because it reduces performance.
- Use
Dependencies
- Brave 5.5.0 -> 5.5.1
- Jetty 9.4.12 -> 9.4.14
- Project Reactor 3.2.2 -> 3.2.3
- netty-tcnative-boringssl-static 2.0.19 -> 2.0.20
- Tomcat 9.0.12 -> 9.0.13, 8.5.34 -> 8.5.35