1.8.0 release notes
14th May 2021
🌟 New features
You can now create a
HealthCheckerthat updates its healthiness periodically. #3392 #3406HealthChecker.of(() -> { HealthCheckStatus status = ...; UnmodifiableFuture.completedFuture(status); }, Duration.ofSeconds(5));You can now create a propagating
ContextAwareExecutorServiceandContextAwareScheduledExecutorServiceusingRequestContext.makeContextPropagating(ExecutorService)andRequestContext.makeContextPropagating(ScheduledExecutorService). The executors propagate aRequestContextto submitted tasks when a submission thread is a request-context-aware thread. #3483ExecutorService myExecutor = Executors.newSingleThreadExecutor(); ExecutorService contextAwareExecutor = RequestContext.makeContextPropagating(myExecutor); // Make sure the current thread is a request-context-aware thread RequestContext ctx = RequestContext.current(); contextAwareExecutor.execute(() -> { assert RequestContext.current() == ctx; });You can now set a maximum allowed length of a server response in the request level using
WebClientRequestPreparation.maxResponseLength(). #3565WebClient client = ...; client.prepare() .maxResponseLength(maxResponseLength) ... .execute();You can now add or set HTTP headers and query params with
java.util.Map. #3499 #3502HttpHeaders .builder() .add(Map.of("foo", "1")) .set(Map.of("bar", "2")); QueryParams.builder() .add(Map.of("page", "1")) .set(Map.of("size", "2"));You can now disable DNS query metrics using
DnsResolverGroupBuilder.disableDnsQueryMetrics(). #3368 #3552ClientFactory.builder() .domainNameResolverCustomizer(customizer -> { customizer.disableDnsQueryMetrics(); })You can now create a JSON Lines response using
JsonLines. #3446 #3456Publisher<MyObject> publisher = StreamMessage.of(new MyObject(...), new MyObject(...), ...); HttpReponse response = JsonLines.fromPublisher(publisher);You can now create an
RpcRequestwith a service name usingRpcRequest.of(). #3537You can now customize
MetricCollectingServicewithMetricCollectingServiceConfiguratorwhen using Spring integration. #3536@Bean public MetricCollectingServiceConfigurator metricCollectingServiceConfigurator() { return builder -> builder .successFunction((context, log) -> { final int statusCode = log.responseHeaders().status().code(); return (statusCode >= 200 && statusCode < 400) || statusCode == 404; }); }
📈 Improvements
- Various performance optimizations. #3534 #3535 #3537 #3538 #3539 #3543 #3548
- You can now null-safely access the elements of collections and arrays in Kotlin 1.5. #3527 #3558
- You can now use code completion for
armeria.sslwhen using IntelliJ IDEA. #3507
🛠️ Bug fixes
- Armeria server now correctly sends
Connection: closeheader on an invalid HTTP/1 request. #3506 - You no longer see an infinity loop or an
IllegalStateException: Recurse updatewhen invalidating a DNS cache. #3528 LoggingServicenow correctly logs a request failed with the server error class(5xx) that is served byTransientService. #3551 #3559- You no longer see trailing dollar signs from a service name. #3508
- You no longer see a
NullPointerExceptionwhen a request times out. #3564
⛓ Dependencies
- Caffeine 2.9.0 -> 2.9.1
- Dropwizard Metrics 4.1.20 -> 4.1.21
- java-jwt 3.15.0 -> 3.16.0
- Micrometer 1.6.6 -> 1.7.0
- Note that
PrometheusMeterRegistrywill work with the Prometheussimpleclientdependency version 0.10.0 or later only. See Micrometer 1.7.0 release note for more information.
- Note that
- Reactor 3.4.5 -> 3.4.6
- scala-collection-compat 2.4.3 -> 2.4.4
- scala-java8-compat 0.9.1 -> 1.0.0
- Spring 5.3.6 -> 5.3.7