Skip to content

Commit 1705672

Browse files
jrhee17minwooxikhoon
authored
Release notes for 1.34.0 (#6518)
<img alt="localhost_8000_release-notes_1 34 0 (2)" src="https://github.com/user-attachments/assets/cd62b01c-800d-4d30-adda-d0f5d671da14" /> --------- Co-authored-by: minux <[email protected]> Co-authored-by: Ikhun Um <[email protected]>
1 parent 5c52325 commit 1705672

File tree

1 file changed

+179
-0
lines changed

1 file changed

+179
-0
lines changed
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
---
2+
date: 2025-11-28
3+
---
4+
5+
## 🌟 New features
6+
7+
- **Model Context Protocol (MCP) Server**: You can now build [MCP](https://modelcontextprotocol.io/) services on top of Armeria using the `armeria-ai-mcp` module. #6513 #6492
8+
```java
9+
// Create an MCP server transport
10+
var transport =
11+
ArmeriaStreamableServerTransportProvider
12+
.builder()
13+
.jsonMapper(...)
14+
.contextExtractor(...)
15+
.build();
16+
// Build the MCP server with your tools and resources
17+
McpServer mcpServer = McpServer.async(transport)
18+
.tools(myTool)
19+
.resources(myResource)
20+
.build();
21+
// Serve MCP via Armeria
22+
Server server =
23+
Server.builder()
24+
.service("/mcp/message", transport.httpService()) // 👈👈👈
25+
.build();
26+
```
27+
- **Retry Limiting**: You can now limit retry requests using <type://RetryLimiter> to prevent system overload during prolonged service degradation. #6409
28+
```java
29+
RetryRule rule = ...
30+
RetryConfig config =
31+
RetryConfig.builder(rule)
32+
.retryLimiter(RetryLimiter.concurrencyLimiting(3)) // 👈👈👈
33+
.build();
34+
var retryingClient = RetryingClient.newDecorator(config);
35+
```
36+
- **JSON-RPC 2.0 Protocol Support**: You can now build [JSON-RPC](https://www.jsonrpc.org/) services using the `armeria-jsonrpc` module. #6504 #6487 #6289
37+
```java
38+
JsonRpcService jsonRpcService = JsonRpcService
39+
.builder()
40+
.methodHandler("echo", (ctx, req) -> {
41+
// handle the request
42+
})
43+
.build();
44+
45+
ServerBuilder sb = Server
46+
.builder()
47+
.service("/json-rpc", jsonRpcService); // 👈👈👈
48+
```
49+
- **Support for Multipart Requests with Duplicate Names**: You can now handle multipart requests that contain multiple parts with the same form field name. #6419 #6430
50+
```java
51+
@Post("/upload")
52+
public void upload(@Param("file") List<MultipartFile> files) { // 👈👈👈
53+
...
54+
}
55+
```
56+
- **AnnotatedService with JSpecify**: You can now use <type://AnnotatedService> with [JSpecify](https://jspecify.dev/)'s `@Nullable` annotations. #6454 #6457
57+
```java
58+
public class MyAnnotatedService {
59+
@Get("/hello")
60+
public String hello(@org.jspecify.annotations.Nullable String value) {
61+
...
62+
}
63+
}
64+
```
65+
- **HTTP Compression Algorithm Control**: You can now configure which compression algorithms to use with <type://EncodingService>. #6390 #6398
66+
```java
67+
EncodingService encodingService =
68+
EncodingService.builder()
69+
.encoderFactories( // 👈👈👈
70+
StreamEncoderFactories.GZIP,
71+
StreamEncoderFactories.DEFLATE,
72+
new MyCustomBrotliEncoderFactory())
73+
.build();
74+
```
75+
- **Athenz Authentication Metrics**: `armeria-athenz` exports metrics of your Athenz-secured services by default. #6423 #6517
76+
- You may also configure the metrics:
77+
```java
78+
var ztsBaseClient =
79+
ZtsBaseClient.builder(ztsUri)
80+
.enableMetrics(meterRegistry, meterIdPrefixFunction) // 👈👈👈
81+
...
82+
.build();
83+
// For services
84+
var decoratorFactory = AthenzServiceDecoratorFactory
85+
.builder(ztsBaseClient)
86+
.meterIdPrefix(myMeterIdPrefix) // 👈👈👈
87+
...
88+
.build();
89+
// For clients
90+
var athenzClient = AthenzClient
91+
.builder(ztsBaseClient)
92+
.meterIdPrefix(myMeterIdPrefix) // 👈👈👈
93+
...
94+
.newDecorator();
95+
```
96+
- **Multipart File Upload Encoding Configuration**: You can now configure how multipart filenames are decoded. #6465
97+
- Use `-Dcom.linecorp.armeria.defaultMultipartFilenameDecodingMode` with `utf_8`, `iso_8859_1`, or `url_decoding`.
98+
- **SAML RelayState Length Configuration**: You can now configure the maximum length for SAML RelayState parameters. #6381
99+
```java
100+
SamlServiceProvider sp =
101+
SamlServiceProvider
102+
.builder()
103+
.relayStateMaxLength(256) // 👈👈👈 Default is 80
104+
...
105+
```
106+
107+
## 📈 Improvements
108+
109+
- Comprehensive improvements to the `armeria-xds` module. #6470 #6469 #6468 #6474 #6475 #6403 #6366 #6461
110+
- Improved logs and metrics for better observability.
111+
- `protoc-gen-validate` is applied for all xDS resources by default.
112+
- Support for Envoy's `RetryPolicy` has been added.
113+
114+
## 🛠️ Bug fixes
115+
116+
- <type://ServiceRequestContext> validation has been improved to avoid false-positive exceptions. #6420 #6479
117+
- Pushing a <type://ServiceRequestContext>-based <type://RequestContext> to a thread that does not already have a <type://ServiceRequestContext> no longer emits an <type://IllegalStateException>.
118+
- Resolved duplicate decorator registration in <type://ZtsBaseClient> when using <type://ArmeriaAutoConfiguration>. #6424
119+
- <type://ContentPreviewerFactory> no longer unnecessarily logs content for binary types. #6485
120+
- Trailers-only gRPC responses no longer include incorrect `Content-Length` headers #6511
121+
- A closing WebSocket session no longer sends an unnecessary `RST_STREAM` frame. #6375
122+
- <type://RejectedRouterHandler#FAIL> correctly throws an exception when duplicate routes are detected. #6498 #6499
123+
- JSON formatting has been fixed in the <type://DocService> debug console. #6434
124+
- <type://DocService> no longer sends `Content-Type` headers for HTTP methods that don't have request bodies. #6442
125+
- A warning log is no longer emitted for certificates missing both a Subject Alternative Name (SAN) and a Common Name (CN). #6477
126+
- `armeria-logback`'s MDC export works correctly when `-Dcom.linecorp.armeria.warnNettyVersions` is set to false. #6428
127+
128+
## ☢️ Breaking changes
129+
130+
- The default decoding mode for multipart request filenames is now UTF-8 instead of ISO-8859-1.
131+
- For the previous behavior, set the system property `-Dcom.linecorp.armeria.defaultMultipartFilenameDecodingMode=iso_8859_1`. #6465
132+
- Dropwizard 1.x integration is no longer supported. #6515
133+
134+
## Dependencies
135+
136+
- Athenz 1.12.21 1.12.29
137+
- Bouncy Castle 1.81 1.82
138+
- Brotli4j 1.18.0 1.20.0
139+
- GraphQL Java 24.2 25.0
140+
- gRPC Java 1.74.0 1.77.0
141+
- Jackson 2.19.2 2.20.1
142+
- Jetty 10.0.20 10.0.26, 11.0.25 11.0.26
143+
- Kotlin 2.1.10 2.2.21
144+
- Kotlin Coroutines 1.10.1 1.10.2
145+
- Kubernetes Client 7.3.1 7.4.0
146+
- Logback 1.5.18 1.5.21
147+
- Micrometer 1.15.2 1.16.0
148+
- Micrometer Context Propagation 1.1.3 1.2.0
149+
- Micrometer Tracing 1.5.2 1.6.0
150+
- Netty 4.2.6.Final 4.2.7.Final
151+
- Prometheus 1.3.10 1.4.3
152+
- Protobuf 3.25.5 3.25.8, 4.29.3 4.33.1
153+
- Protobuf Jackson 2.7.0 2.8.1
154+
- Reactor Core 3.7.8 3.8.0
155+
- Reactor Kotlin Extensions 1.2.3 1.3.0
156+
- RxJava 3.1.11 3.1.12
157+
- Sangria 4.2.10 4.2.15
158+
- ScalaPB 0.11.17 0.11.20
159+
- ScalaPB JSON 0.12.1 0.12.2
160+
- Spring 6.2.9 6.2.14
161+
- Spring Boot 3.5.7 3.5.8
162+
- Tomcat 10.1.31 10.1.49
163+
164+
165+
## 🙇 Thank you
166+
167+
<ThankYou usernames={[
168+
'0x1306e6d',
169+
'chickenchickenlove',
170+
'hirakida',
171+
'ikhoon',
172+
'jrhee17',
173+
'minwoox',
174+
'patcher454',
175+
'schiemon',
176+
'sh-cho',
177+
'triberraar',
178+
'trustin'
179+
]} />

0 commit comments

Comments
 (0)