Skip to content

Releases: line/armeria

armeria-0.11.0.Final

04 Mar 06:09
Compare
Choose a tag to compare

New features

  • #114 Distributed tracing via Zipkin/Brave

This release introduces distributed tracing capability to Armeria clients and servers using Brave, a distributed tracing library compatible with Zipkin. This enables us to watch timing data among the whole Armeria RPC chain.

Decorating a client

// Create a brave instance with service name, span collector, and sampling rate.
Brave brave = new Brave.Builder("MyClientMain")
        .spanCollector(new ScribeSpanCollector("127.0.0.1", 9410))
        .traceSampler(Sampler.create(0.01f))
        .build();

MyService.Iface client =
        new ClientBuilder("tbinary+http://127.0.0.1:8080/thrift/myService")
                .decorator(HttpTracingClient.newDecorator(brave))
                .build(MyService.Iface.class);

Decorating a server

// Create a brave instance with service name, span collector, and sampling rate.
Brave brave = new Brave.Builder("MyServiceMain")
        .spanCollector(new ScribeSpanCollector("127.0.0.1", 9410))
        .traceSampler(Sampler.create(0.01f))
        .build();

ServerBuilder builder = new ServerBuilder();
builder.port(8080, SessionProtocol.HTTP);
builder.serviceAt("/thrift/myservice",
                  ThriftService.of(new MyServiceHandler(brave))
                               .decorate(HttpTracingService.newDecorator(brave));

Bug fixes

  • #118 Default maxFrameLength differs between client and server side.
  • #119 Unexpected exceptions are not logged properly.

armeria-0.10.0.Final

24 Feb 11:29
Compare
Choose a tag to compare

New features

  • #110 Provide a way to create a TomcatService from an existing Tomcat Connector

    • Useful when using an embedded Tomcat already with other library such as Spring Boot:
    ServerBuilder sb = new ServerBuilder();
    sb.serviceUnder("/tomcat", TomcatService.forConnector("example.com", springBootConnector));
  • #115 DropWizard Metrics support

    • Use MetricCollectingClient and MetricCollectingService to collect the metrics of your clients and services:
    ServerBuilder sb = new ServerBuilder();
    sb.serviceAt(
        "/thrift/foo", ThriftService.of(...).decorate(
            MetricCollectingService.newDropwizardDecorator("fooService", metricRegistry));
    
    ClientBuilder cb = new ClientBuilder(...);
    cb.decorator(MetricCollectingClient.newDropwizardDecorator("barService", metricRegistry));

Improvements

  • #117 Upgrade Netty to 4.1.0.CR3

armeria-0.9.0.Final

16 Feb 02:19
Compare
Choose a tag to compare

New features

  • #96 Add more configuration properties to TomcatService
  • #97 Add a way to create a derived client
    • You can create a new client with different ClientOptions more efficiently using Clients.newDerivedClient().
  • #107 More efficient and correct H1C-to-H2C upgrade
    • SessionProtocolNegotiationCache now keeps the recent HTTP/2 upgrade failures so that Armeria does not send an upgrade request to the hosts known to be incapable of HTTP/2. This should reduce the number of HEAD / HTTP/1.1 upgrade requests in your H1C connections.

Improvements

  • #102 Upgrade to Netty 4.1.0.CR1
  • #105 Reduce the unnecessarily noisy/long exceptions

Bug fixes

  • #99 Check all interfaces, including ancestor interfaces, when analyzing Thrift handler
  • #100 Send the correct 'Host' header when upgrading

Documentation

  • #108 Missing SLF4J version in example pom.xml
  • #109 Update the project setup guide / Update dependencies

armeria-0.8.0.Final

25 Jan 09:44
Compare
Choose a tag to compare

New features

  • #93 Revamp the client-side decorator API
  • #84 Add Server.nextEventLoop() so that a user can get one of the available Netty EventLoops.

Bug fixes

  • #81 #82 Fix missing remote/local addresses in TomcatService
  • #94 Fix an intermittent problem with CachedEntry in HttpFileService

armeria-0.7.0.Final

07 Jan 08:20
Compare
Choose a tag to compare
  • #77 More robust resolution/rejection of an invocation promise
  • #78 Use jetty-alpn-agent to simplify pom.xml
  • #79 Add methods to ServiceInvocationContext for propagating context into callbacks

armeria-0.6.4.Final

22 Dec 04:58
Compare
Choose a tag to compare
  • #73 Redirect from /path to /path/
  • #74 Fix missing query string conversion in TomcatService
  • #75 Pass through non-200 HTTP responses for SimpleHttpClient
  • #76 Fix wrong call depth in TomcatService.forCurrentClassPath()

armeria-0.6.3.Final

18 Dec 08:06
Compare
Choose a tag to compare
  • #70 Fix NPE in HttpServerHandler.exceptionCaught()
  • #71 Fix missing HTTP request content in TomcatService
  • #72 Add a getter for EventLoopGroup to RemoteInvokerFactory

armeria-0.6.2.Final

10 Dec 08:01
Compare
Choose a tag to compare
  • #68 Fix a leak in a long-living HTTP/2 connection

armeria-0.6.1.Final

09 Dec 12:39
Compare
Choose a tag to compare
  • #66 Handle HTTP/2 upgrade response properly so that Netty does not complain about unhandled messages

armeria-0.6.0.Final

08 Dec 07:49
Compare
Choose a tag to compare

Visit the milestone page for the detailed change list.

Debug form (DocService)

  • Sending a debug form in a DocService page will add a URL hash which contains the content of the debug form to the current browser location. A user could share the URL, so that the recipient sees a pre-populated debug form.
  • A user can specify sample Thrift arguments when constructing a DocService so that the DocService can populate a better JSON template in a debug form.

Server-side metrics

  • Added MetricCollectingService as a preparatory step for implementing concrete metrics support

HttpService

  • Added HttpService.orElse() that allows combining two HttpService into one. e.g. HttpFileService.for(...).orElse(TomcatService.for(...)

Core

  • The name of the Logger returned by ServiceInvocationContext.logger() has changed.
    • It's armeria.services.<service_path_prefix> by default. e.g. armeria.services.hello.thrift for /hello/thrift
    • The service logger name can be customized via ServerBuilder.serviceLoggerNamePrefix() and by specifying the logger name when binding a service via ServerBuilder.service() or VirtualHostBuilder.service().
  • Renamed ServiceEntry to ServiceConfig
  • Added parent getter methods to the configuration classes for better user experience:
    • ServiceConfig.virtualHost()
    • ServiceConfig.server()
    • VirtualHost.server()
    • ServerConfig.server()
  • The signatures of the following methods have been changed:
    • Service.serviceAdded(ServiceConfig)
    • ServiceCodec.decodeRequest(ServiceConfig, ...)
    • ServiceCodec.codecAdded(ServiceConfig)
    • ServiceHandler.handlerAdded(ServiceConfig)