com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker Scala Examples
The following examples show how to use com.amazonaws.services.kinesis.clientlibrary.lib.worker.Worker.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: Init.scala From cave with MIT License | 5 votes |
package init import java.net.InetAddress import java.util.UUID import com.amazonaws.services.kinesis.clientlibrary.lib.worker.{InitialPositionInStream, KinesisClientLibConfiguration, Worker} import com.amazonaws.services.kinesis.metrics.impl.NullMetricsFactory import com.cave.metrics.data.AwsConfig import com.cave.metrics.data.influxdb.{InfluxConfiguration, InfluxDataSink} import com.cave.metrics.data.kinesis.RecordProcessorFactory import com.typesafe.config.ConfigFactory import org.apache.commons.logging.LogFactory import play.api.Play import scala.util.Try object Init { // Docker should place the stream name in this environment variable final val EnvStreamName = "STREAM_NAME" // The name of this application for Kinesis Client Library final val ApplicationName = "cave-db-worker" // CloudWatch Reporter parameters final val MetricsNamespace = s"metrics-$ApplicationName" final val MetricsBufferTime = 1000L final val MetricsBufferSize = 200 final val ThreadWaitTimeout = 10000L private val Log = LogFactory.getLog("db-writer-app") val worker = createWorker() val workerThread = new Thread(worker) def start(): Unit = { workerThread.start() } def shutdown(): Unit = { worker.shutdown() Try (workerThread.join(ThreadWaitTimeout)) recover { case e: Exception => Log.info(s"Caught exception while joining worker thread: $e") } } private[this] def createWorker(): Worker = { val configuration = Play.current.configuration val serviceConfFile = configuration.getString("serviceConf").getOrElse("db-writer-service.conf") val kinesisAppName = configuration.getString("appName").getOrElse(ApplicationName) val appConfig = ConfigFactory.load(serviceConfFile).getConfig("db-writer") val awsConfig = new AwsConfig(appConfig) val streamName = System.getenv(EnvStreamName) match { case "processed" => awsConfig.processedStreamName case _ => awsConfig.rawStreamName } val workerId = s"${InetAddress.getLocalHost.getCanonicalHostName}:${UUID.randomUUID()}" Log.info(s"Running $ApplicationName for stream $streamName as worker $workerId") // a connection to the InfluxDB backend val influxConfig = appConfig.getConfig("influx") new Worker( // a factory for record processors new RecordProcessorFactory( awsConfig, new InfluxDataSink(InfluxConfiguration(influxConfig))), // a client library instance new KinesisClientLibConfiguration(kinesisAppName, streamName, awsConfig.awsCredentialsProvider, workerId) .withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON), new NullMetricsFactory) // TODO: check out the possibility to use CloudWatch Metrics // new CWMetricsFactory(awsConfig.awsCredentialsProvider, MetricsNamespace, MetricsBufferTime, MetricsBufferSize)) } }