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

org.elasticmq.server.ElasticMQServerConfig.scala Maven / Gradle / Ivy

There is a newer version: 0.14.15
Show newest version
package org.elasticmq.server

import java.util.concurrent.TimeUnit

import com.typesafe.config.{ConfigObject, Config}
import org.elasticmq.NodeAddress
import org.elasticmq.rest.sqs.SQSLimits

class ElasticMQServerConfig(config: Config) {
  // Configure main storage

  sealed trait Storage

  case object InMemoryStorage extends Storage

  val storage: Storage = {
    val subConfig = config.getConfig("storage")
    val storageType = subConfig.getString("type")
    if ("in-memory".equalsIgnoreCase(storageType)) {
      InMemoryStorage
    } else {
      throw new IllegalArgumentException("Unknown storage type: " + storageType)
    }
  }

  // What is the outside visible address of this ElasticMQ node (used by rest-sqs)

  val nodeAddress = {
    val subConfig = config.getConfig("node-address")
    NodeAddress(subConfig.getString("protocol"), subConfig.getString("host"), subConfig.getInt("port"),
      subConfig.getString("context-path"))
  }

  // Optionally expose the REST SQS interface

  class RestSqsConfiguration {
    private val subConfig = config.getConfig("rest-sqs")
    val enabled = subConfig.getBoolean("enabled")
    val bindPort = subConfig.getInt("bind-port")
    val bindHostname = subConfig.getString("bind-hostname")
    val sqsLimits = {
      val name = subConfig.getString("sqs-limits")
      if ("relaxed".equalsIgnoreCase(name)) {
        SQSLimits.Relaxed
      } else if ("strict".equalsIgnoreCase(name)) {
        SQSLimits.Strict
      } else {
        throw new IllegalArgumentException("Unknown sqs-limits name: " + name)
      }
    }
  }

  val restSqs = new RestSqsConfiguration

  case class CreateQueue(name: String,
    defaultVisibilityTimeoutSeconds: Option[Long],
    delaySeconds: Option[Long],
    receiveMessageWaitSeconds: Option[Long])

  val createQueues: List[CreateQueue] = {
    def getOptionalDuration(c: Config, k: String) = if (c.hasPath(k)) Some(c.getDuration(k, TimeUnit.SECONDS)) else None

    import scala.collection.JavaConversions._
    config.getObject("queues").map { case (n, v) =>
      val c = v.asInstanceOf[ConfigObject].toConfig
      CreateQueue(
        n,
        getOptionalDuration(c, "defaultVisibilityTimeout"),
        getOptionalDuration(c, "delay"),
        getOptionalDuration(c, "receiveMessageWait")
      )
    }.toList
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy