A Java-friendly version of the TwitterServer.
A Java-friendly version of the TwitterServer.
In addition to TwitterServer, this abstract class defines its own
Java-friendly lifecycle methods onInit
, preMain
, postMain
and
onExit
that might be overridden in a concrete class.
In order to launch the AbstractTwitterServer
instance, the main
method should be explicitly defined. It makes sense to define it
within an inner class Main
as shown below.
public class JavaServer extends AbstractTwitterServer { public static class Main { public static void main(String[] args) { new JavaServer().main(args); } } }
The Main
class containing the main
method may be launched via
java JavaServer$Main
.
Defines many of the default /admin/
HTTP routes.
Captures events from a logger.
Captures events from a logger.
By default EventSink
uses the root logger and default
com.twitter.util.events.Sink. We can use
com.twitter.finagle.context.Contexts to specify overrides.
import EventSink._ val spec = Seq( Capture(Logger("example.MyClass"), Level.DEBUG), Capture(Logger("example.OtherClass"), Level.CRITICAL) ) Contexts.local.let(eventSinkCtx, spec:_*) { // Start twitter-server... }
Defines a hook into an App.
Mix-in to include service-loaded hooks.
Registers any global linter rules.
Indicates that a com.twitter.finagle.Resolver was not found for the
given name
using the FlagResolver.
Indicates that a com.twitter.finagle.Resolver was not found for the
given name
using the FlagResolver.
Resolvers are discovered via the com.twitter.server.resolverMap
Create a new hook for the given App.
Create a new hook for the given App. NewHooks are service-loaded.
An admin http server which serves requests outside the default finagle worker pool.
An admin http server which serves requests outside the default finagle worker pool. This server shadows vital endpoints (ex. stats) that are useful for diagnostics and should be available even if the server becomes overwhelmed.
Note, we don't serve all of /admin on a separate worker pool because it's important to serve certain admin endpoints in-band with the server. In particular, /health and /ping should be served in-band so that they are an accurate proxy of server health.
Twitter Server defines a template from which servers at Twitter are built.
Twitter Server defines a template from which servers at Twitter are built. It provides common application components such as an administrative HTTP server, tracing, stats, etc. These features are wired in correctly for use in production at Twitter.
For DI (Dependency Injection) Twitter Server uses self-typed Scala traits
that might be mixed in the TwitterServer
trait. The common practice is
to define self-typed traits against the App trait as shown below.
import com.twitter.app.App import com.twitter.server.TwitterServer trait MyModule { self: App => // module logic } object MyApp extends TwitterServer with MyModule { // app logic }
Twitter Server
Provides a common configuration setup for internal Twitter servers based on com.twitter.app.App.
An HTTP server is bound to a configurable port (default: 9900) to which commands can be sent and information queried. Additional handlers can be provided by adding them to com.twitter.finagle.http.HttpMuxer.
Provided handlers
See com.twitter.server.TwitterServer
Configuration
The default port is set via defaultAdminPort. This can be overridden in the super class or set on the command line with -admin.port.