armeria

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

Stars
4.7K
Committers
243

Bot releases are hidden (Show)

armeria -

Published by trustin over 8 years ago

New features

  • #122 Make EventLoop available to RemoteInvoker.invoke()
    • NB: This is a breaking change due to the signature change of RemoteInvoker.invoke(). You won't notice this at all if you did not implement RemoteInvoker by yourself to write a decorator.
  • #125 Allow registering callbacks when propagating a ServiceInvocationContext
    • You can add callbacks to a ServiceInvocationContext via onEnter(Runnable) and onExit(Runnable).
armeria -

Published by trustin over 8 years ago

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 -

Published by trustin over 8 years ago

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 -

Published by trustin over 8 years ago

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 -

Published by trustin over 8 years ago

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 -

Published by trustin almost 9 years ago

  • #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 -

Published by trustin almost 9 years ago

  • #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 -

Published by trustin almost 9 years ago

  • #70 Fix NPE in HttpServerHandler.exceptionCaught()
  • #71 Fix missing HTTP request content in TomcatService
  • #72 Add a getter for EventLoopGroup to RemoteInvokerFactory
armeria -

Published by trustin almost 9 years ago

  • #68 Fix a leak in a long-living HTTP/2 connection
armeria -

Published by trustin almost 9 years ago

  • #66 Handle HTTP/2 upgrade response properly so that Netty does not complain about unhandled messages
armeria -

Published by trustin almost 9 years ago

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)
armeria -

Published by trustin almost 9 years ago

  • #48: Fix the compatibility issues with the clients that send incorrect or missing Content-Type and Accept headers
  • #44: Do not send a debug request when the textarea contains an invalid JSON value
armeria -

Published by trustin almost 9 years ago

New features

  • New Thrift protocol: TTEXT
    • Useful for debugging your Thrift service, in combination with DocService
  • A ThriftService now handles multiple protocols based on the protocol parameter of Content-Type header.
    • e.g. application/x-thrift; protocol=tcompact
  • Better interoperability with other HTTP/2 implementations
    • Now works with Jetty and cURL
  • Upgraded to Netty 4.1.0.Beta8

Breaking changes

  • A ThriftService is now instantiated via its factory methods instead of its constructors.
  • ServiceInvocationContext.current() does not return an Optional anymore.
    • It just raises an exception when context is unavailable.
    • Use mapCurrent() if you do not want an exception.

Documentation service changes

The operations exposed by the documentation service now have 'endpoints' and 'debug' section.

  • The endpoints section lists the paths and the accepted content types of the operation.
  • The debug section allows you to invoke the service via Thrift TEXT protocol easily.

af0a75ac-9575-11e5-9913-b5112af906eb

armeria -

Published by trustin almost 9 years ago

Initial open source release

Package Rankings
Top 5.13% on Repo1.maven.org
Related Projects