Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard.
APACHE-2.0 License
Bot releases are visible (Hide)
RequestContext.PushHandle
has been replaced with SafeCloseable
.ClientOptions
construction and correct client derivation
ClientOptionsBuilder
and Clients.newDerivedClient()
for more information.From this release, Armeria is split into multiple modules to better organize its growing feature set.
armeria
- the core API including basic HTTP and Thrift supportarmeria-grpc
- gRPC integrationarmeria-jetty
- Jetty-based HTTP servicesarmeria-logback
- (New) Logback integrationarmeria-retrofit2
- (New) Retrofit2 adapterarmeria-tomcat
- Tomcat-based HTTP servicesarmeria-zipkin
- distributed call tracing support with ZipkinPlease update your project's dependencies.
armeria-retrofit2
, a new Retrofit2 adapter that uses Armeria as the transport layer
armeria-logback
, the Logback integration which exports context properties to MDC
RequestContext.blockingTaskExecutor()
context-aware
ExecutorService
returned by RequestContext.blockingTaskExecutor()
will become context-aware. The ExecutorService
will call RequestContext.makeContextWare()
automatically on the submitted tasks.EndpointGroupRegistry.register()
replace and add unregister()
EndpointGroupRegistry.replace()
has been removed.EndpointGroupRegistry
.TomcatService
ServiceRequestContext.path()
for consistency with ClientRequestContext.path()
RAW_RPC_REQUEST
and RAW_RPC_RESPONSE
to RequestLog
and ResponseLog
com.linecorp.armeria.traffic.server
.com.linecorp.armeria.traffic.client
.user-agent
HTTP headerByteBuf
leak in ArmeriaGrpcServerStream
{}
in DocService
debug formDocService
to handle one-way Thrift functions properlyDefaultStreamMessage
#263 Add CORS support
ServerBuilder sb = ...;
sb.serviceUnder("/foo/bar", myHttpService.decorate(
CorsServiceBuilder.forOrigin("example.com")
.allowRequestMethods(HttpMethod.GET).newDecorator()));
#272 Expose version information in runtime
com.linecorp.armeria.common.util.Version
.#274 #276 Add 'sticky HTTP headers' checkbox in the DocService
debug form
#280 Allow a user to customize the names of the Dropwizard Metrics metric entries
BiFunction
that transforms a RequestLog
into a metric name.User-Agent
header of HttpClient
DocService
debug form without losing precision<prefix>.<method>
and <prefix>.<pathMapping.metricName>.<method>
respectively.PathMapping
now has two new methods: loggerName()
and metricName()
.Content-Type
regardless.#251 Add the getter for SSLSession
to ServiceRequestContext
ServiceRequestContext.sslSession()
.#252 Add HttpObject.isEndOfStream()
#254 Fluent API for building virtual hosts with ServerBuilder
ServerBuilder sb = new ServerBuilder();
sb.serviceAt(...) // default virtual host service 1
.serviceUnder(...) // default virtual host service 2
.withVirtualHost("*.foo.com")
.serviceAt(...) // virtual host service 1
.serviceUnder(...) // virtual host service 2
.and().build();
#260 Add support for server-side TMultiplexedProtocol
THttpService.of(ImmutableMap.of(
"", (Iface) name -> "none:" + name, // default service
"foo", (Iface) name -> "foo:" + name, // service 'foo'
"bar", (Iface) name -> "bar:" + name)) // service 'bar'
#261 Change metric name of http request/response
GET/POST
to ${path}#GET/${path}#POST
ClassCastException
when using Thrift binary typetbinary+http://127.0.0.1:8080/thrift#myService
service.decorate((delegate, ctx, req) -> delegate.serve(ctx, req));
GrpcServiceBuilder
and GrpcService
HttpClientPipelineConfigurator
GrpcService
class is set to package-local by mistake.DocService
debug form to send additional HTTP headersHttpEncodingService
.FilteredStreamMessage
which is useful for transforming content stream.DeferredStreamMessage
and DeferredHttpResponse
which allows the deferred instantiation of an actual HttpResponse
.ConcurrentLimiting(Http)Client
which limits the number of concurrent requests.RichPublisher
to StreamMessage
QueueBasedRichPublisher
-> DefaultStreamMessage
StreamMessage
has been revised for clarity.reactivestreams
to stream
pom.xml
in the web siteAggregatedHttpMessage
:scheme
header when sending an HTTP/2 request.equals()
and hashCode()
to DefaultAggregatedHttpMessage