![JAR search and dependency download from the Maven repository](/logo.png)
com.twitter.inject.thrift.modules.ThriftClientModule.scala Maven / Gradle / Ivy
package com.twitter.inject.thrift.modules
import com.github.nscala_time.time
import com.google.inject.Provides
import com.twitter.finagle._
import com.twitter.finagle.factory.TimeoutFactory
import com.twitter.finagle.param.Stats
import com.twitter.finagle.service.TimeoutFilter
import com.twitter.finagle.stats.StatsReceiver
import com.twitter.finagle.thrift.ClientId
import com.twitter.inject.TwitterModule
import com.twitter.util.Duration
import javax.inject.Singleton
import scala.reflect.ClassTag
abstract class ThriftClientModule[T: ClassTag]
extends TwitterModule
with time.Implicits {
/**
* Name of client for use in metrics
*/
val label: String
/**
* Destination of client (usually a wily path)
*/
val dest: String
/**
* Enable thrift mux for this connection.
*
* Note: Both server and client must have mux enabled otherwise
* a nondescript ChannelClosedException will be seen.
*/
def mux: Boolean = true
def requestTimeout: Duration = Duration.Top
def connectTimeout: Duration = Duration.Top
@Singleton
@Provides
def providesClient(clientId: ClientId, statsReceiver: StatsReceiver): T = {
val labelAndDest = s"$label=$dest"
if (mux) {
ThriftMux.client.
configured(TimeoutFilter.Param(requestTimeout)).
configured(TimeoutFactory.Param(connectTimeout)).
configured(Stats(statsReceiver.scope("clnt"))).
withClientId(clientId).
newIface[T](labelAndDest)
}
else {
Thrift.client.
configured(TimeoutFilter.Param(requestTimeout)).
configured(TimeoutFactory.Param(connectTimeout)).
configured(Stats(statsReceiver.scope("clnt"))).
withClientId(clientId).
newIface[T](labelAndDest)
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy