You're seeing the release note of an old version. Check out the latest release note.
v1.30.0
August 12, 2024
🌟 New features
-
Outlier Detection for Connections: You can now use
OutlierDetectionto detect unhealthy connections and close them gracefully. #5751 #5763OutlierDetectingRule rule =
OutlierDetectingRule
.builder()
.onServerError()
.onException(IOException.class)
.onException(WriteTimeoutException.class, OutlierDetectionDecision.FATAL)
.build();
OutlierDetection outlierDetection =
OutlierDetection
.builder(rule)
.counterSlidingWindow(Duration.ofSeconds(10))
.counterUpdateInterval(Duration.ofSeconds(1))
.failureRateThreshold(0.5)
.build();
ClientFactory
.builder()
// Apply the OutlierDetection to detect and close unhealthy connections
.connectionOutlierDetection(outlierDetection) -
Automatic value loader: You can now use an
AsyncLoaderto (re)load a value atomically, lazily and asynchronously. #5506 #5590Function<String, CompletableFuture<String>> loader = cache -> {
ResponseEntity<String> response =
client.prepare().get("/api/v1/items").asString().execute();
return response.thenApply(res -> res.content());
};
AsyncLoader<String> asyncLoader =
AsyncLoader
.builder(loader)
.expireAfterLoad(Duration.ofSeconds(60))
.build();
asyncLoader.get().join(); -
Configurable Response Timeout: You can now use
ResponseTimeoutModeto configure when a response timeout starts for a client. The timeout can be set when a request is started, a connection is acquired or a request is fully sent. #4591 #5793ClientFactory
.builder()
.responseTimeout(Duration.ofSeconds(5))
// A request will be timed out if the response is not fully received
// within 5 seconds.
.responseTimeoutMode(ResponseTimeoutMode.FROM_START)
.build(); -
Fallback File Extensions: You can now set fallback file extensions in
FileService. This feature is useful when you want to map a RESTful URI to a static resource file. #4542 #5806FileService
.builder(rootDir)
// '/app/projects' path could be mapped to '<rootDir>/app/projects.html'
.fallbackFileExtensions("html")
... -
Sending Arbitrary Content in gRPC-JSON Transcoding: You can now use google.api.HttpBody to send arbitrary content in gRPC-JSON transcoding. #5311 #5400
rpc ArbitraryHttp(google.api.HttpBody) returns (google.api.HttpBody) {
option (google.api.http) = {
post: "/v1/arbitrary"
};
} -
Zone-Aware Load Balancing:
XdsEndpointGroupnow supports zone-aware load balancing which prioritizes sending traffic to local zones. #5785 #5808 -
WebSocketService Testing: You can now use
ServerExtension.webSocketClient()to testWebSocketService. #5538 #5765
📈 Improvements
- Armeria client now supports the
Expect: 100-continueheader. #5646 ClientRequestContext.cancel()now cancels the associated request immediately. #5800- The health checking behavior of
XdsEndpointGroupis more aligned with Envoy. #5785 - Subsets now
supports features available in the default load balancer of
XdsEndpointGroup#5801 - New headers from Guava have been added to
HttpHeaderNames. #5789 - Armeria is now compatible with Thrift 0.19 and 0.20.0 #5243 #5822
- Armeria client now silently ignores content instead of raising an exception when content exists for a status that indicates empty content. #5823
🛠️ Bug fixes
- Validation for URI's authority is relaxed to permit underscores (
_). #5814 #5854 - A user can send and receive an HTTP request whose
:pathcontains the following characters now: #5845- TAB (0x09)
- FS (0x1C)
- GS (0x1D)
- RS (0x1E)
- US (0x1F)
- Fixed a potential leak when sending compressed responses. #5858
ResteasyClientnow correctly releasesClientFactorywhen it is closed. #5833- Content decompression exceptions are now properly propagated. #5177 #5620
@Blockingnow correctly works with gRPC-Kotlin stubs #5295 #5399- Fixed
DocServicesidebar to occupy at most 40% of the window width. #5091 #5839 InputStreamcreated fromStreamMessage.toInputStream()now correctly raises an exception if the originalStreamMessageis closed with an exception. #5859ClientRequestContext.isTimedOut()now correctly returnstrueif a DNS query, a session creation or a write operation times out. #4935 #5156
📃 Documentation
☢️ Breaking changes
- Modified the behavior of
Endpoint.withAttrs()to merge the originalAttributeswith the new one. #5802- Instead,
Endpoint.replaceAttrs()is added to replace the entire attributes ofEndpoint.
- Instead,
⛓ Dependencies
- Curator 5.6.0 → 5.7.0
- Dropwizard Metrics 4.2.25 → 4.2.26
- Eureka 2.0.2 → 2.0.3
- GraphQL Kotlin 7.1.1 → 7.1.4
- gRPC Java 1.64.0 → 1.65.1
- Jackson 2.17.1 → 2.17.2
- Jetty 9.4.54 → 9.4.55, 11.0.20 → 11.0.22, 12.0.8 → 12.0.12
- Kafka client 3.7.0 → 3.8.0
- Kubernetes client 6.12.1 → 6.13.1
- Micrometer 1.13.0 → 1.13.2
- Micrometer Tracing 1.2.4 → 1.3.2
- Netty 4.1.110 → 4.1.112
- Prometheus 1.3.0 → 1.3.1
- Reactor 3.6.6 → 3.6.8
- Sangria 4.1.0 → 4.1.1
- Scala 3.4.1 - 3.4.2
- ScalaPB 0.11.15 → 0.11.17
- SLF4J 2.0.12 → 2.0.13
- Spring 6.1.8 → 6.1.11
- Spring Boot 3.3.0 → 3.3.2
- Tomcat 9.0.87 → 9.0.91, 10.1.20 → 10.1.26
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:













