All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jp.co.bizreach.kinesis.AmazonKinesis.scala Maven / Gradle / Ivy

There is a newer version: 0.0.8
Show newest version
package jp.co.bizreach.kinesis

import com.amazonaws.ClientConfiguration
import com.amazonaws.auth.AWSCredentialsProvider
import com.amazonaws.client.builder.AwsClientBuilder.EndpointConfiguration
import com.amazonaws.regions.Regions
import com.amazonaws.services.kinesis.{AmazonKinesisClientBuilder, AmazonKinesis => AWSKinesis}
import jp.co.bizreach.kinesis.action.PutRecordAction

object AmazonKinesis {
  def apply()(implicit region: Regions): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withRegion(region)
      .build()) with PutRecordAction
  }
  def apply(credentials: AWSCredentialsProvider)(implicit region: Regions): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withCredentials(credentials)
      .withRegion(region)
      .build()) with PutRecordAction
  }
  def apply(endpointConfiguration: EndpointConfiguration): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withEndpointConfiguration(endpointConfiguration)
      .build()) with PutRecordAction
  }
  def apply(config: ClientConfiguration)(implicit region: Regions): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withClientConfiguration(config)
      .withRegion(region)
      .build()) with PutRecordAction
  }
  def apply(config: ClientConfiguration, endpointConfiguration: EndpointConfiguration): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withClientConfiguration(config)
      .withEndpointConfiguration(endpointConfiguration)
      .build()) with PutRecordAction
  }
  def apply(credentials: AWSCredentialsProvider, endpointConfiguration: EndpointConfiguration): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withCredentials(credentials)
      .withEndpointConfiguration(endpointConfiguration)
      .build()) with PutRecordAction
  }
  def apply(credentials: AWSCredentialsProvider, config: ClientConfiguration)(implicit region: Regions): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withCredentials(credentials)
      .withClientConfiguration(config)
      .withRegion(region)
      .build()) with PutRecordAction
  }
  def apply(credentials: AWSCredentialsProvider, config: ClientConfiguration, endpointConfiguration: EndpointConfiguration): AmazonKinesis = {
    new AmazonKinesis(AmazonKinesisClientBuilder.standard
      .withCredentials(credentials)
      .withClientConfiguration(config)
      .withEndpointConfiguration(endpointConfiguration)
      .build()) with PutRecordAction
  }
  def apply(client: AWSKinesis): AmazonKinesis = {
    new AmazonKinesis(client) with PutRecordAction
  }
}

class AmazonKinesis(client: AWSKinesis){
  self: PutRecordAction =>

  /**
    * Writes a single data record from a producer into an Amazon Kinesis stream.
    *
    * Note: This method does not perform retry processing.
    *
    * @param request Represents the input for PutRecord
    * @return Right is result of the PutRecord operation on success.
    *         Left is the occurred error on failure.
    */
  def putRecord(request: PutRecordRequest): Either[Throwable, PutRecordResult] = {
    withPutRetry(0){ // not retry
      client.putRecord(request)
    }
  }

  /**
    * Writes a single data record from a producer into an Amazon Kinesis stream.
    *
    * Note: This method does perform retry processing. Max retry count is 3 (SDK default).
    *
    * @param request Represents the input for PutRecord
    * @return Right is result of the PutRecord operation on success.
    *         Left is the occurred error on failure.
    */
  def putRecordWithRetry(request: PutRecordRequest): Either[Throwable, PutRecordResult] = {
    withPutRetry(){
      client.putRecord(request)
    }
  }

  /**
    * Writes multiple data records from a producer into an Amazon Kinesis stream in a single call.
    * The response Records sequence always includes the same number of records as the request sequence
    * by same ordering.
    *
    * Note: This method does not perform retry processing.
    *
    * @param request Represents the input for PutRecords
    * @return each record result. Right is result of the PutRecords operation on success.
    *         Left is the occurred error on failure.
    */
  def putRecords(request: PutRecordsRequest): Seq[Either[PutRecordsResultEntry, PutRecordsResultEntry]] = {
    withPutsRetry(request.records, 0){ entry => // not retry
      client.putRecords(PutRecordsRequest(request.streamName, entry))
    }
  }

  /**
    * Writes multiple data records from a producer into an Amazon Kinesis stream in a single call.
    * The response Records sequence always includes the same number of records as the request sequence
    * by same ordering.
    *
    * Note: This method does perform retry processing. Max retry count is 3 (SDK default).
    *
    * @param request Represents the input for PutRecords
    * @return each record result. Right is result of the PutRecords operation on success.
    *         Left is the occurred error on failure.
    */
  def putRecordsWithRetry(request: PutRecordsRequest): Seq[Either[PutRecordsResultEntry, PutRecordsResultEntry]] = {
    withPutsRetry(request.records){ entry =>
      client.putRecords(PutRecordsRequest(request.streamName, entry))
    }
  }

  def shutdown(): Unit = {
    client.shutdown()
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy