You're seeing the release note of an old version. Check out the latest release note.
v1.8.0
May 14, 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(). #3537 -
You 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
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:












