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

com.github.j5ik2o.dockerController.elasticmq.ElasticMQController.scala Maven / Gradle / Ivy

package com.github.j5ik2o.dockerController.elasticmq

import com.github.dockerjava.api.DockerClient
import com.github.dockerjava.api.command.CreateContainerCmd
import com.github.dockerjava.api.model.HostConfig.newHostConfig
import com.github.dockerjava.api.model.{ ExposedPort, Ports }
import com.github.j5ik2o.dockerController.DockerControllerImpl
import com.github.j5ik2o.dockerController.elasticmq.ElasticMQController.{
  DefaultContainerPorts,
  DefaultImageName,
  DefaultImageTag
}

import scala.concurrent.duration.{ DurationInt, FiniteDuration }
import scala.jdk.CollectionConverters._

object ElasticMQController {
  final val DefaultImageName: String        = "softwaremill/elasticmq"
  final val DefaultImageTag: Option[String] = Some("1.1.1")
  final val DefaultContainerPorts: Seq[Int] = Seq(9324, 9325)

  def apply(
      dockerClient: DockerClient,
      outputFrameInterval: FiniteDuration = 500.millis,
      imageName: String = DefaultImageName,
      imageTag: Option[String] = DefaultImageTag,
      envVars: Map[String, String] = Map.empty
  )(dockerHost: String, hostPorts: Seq[Int]): ElasticMQController =
    new ElasticMQController(dockerClient, outputFrameInterval, imageName, imageTag, envVars)(
      dockerHost,
      hostPorts
    )
}

class ElasticMQController(
    dockerClient: DockerClient,
    outputFrameInterval: FiniteDuration = 500.millis,
    imageName: String = DefaultImageName,
    imageTag: Option[String] = DefaultImageTag,
    envVars: Map[String, String] = Map.empty
)(dockerHost: String, hostPorts: Seq[Int])
    extends DockerControllerImpl(dockerClient, outputFrameInterval)(imageName, imageTag) {

  private val environmentVariables = Map(
    "JAVA_OPTS"                             -> "-Dconfig.override_with_env_vars=true",
    "CONFIG_FORCE_node__address_host"       -> "*",
    "CONFIG_FORCE_rest__sqs_bind__hostname" -> "0.0.0.0",
    "CONFIG_FORCE_generate__node__address"  -> "false"
  ) ++
    envVars

  override protected def newCreateContainerCmd(): CreateContainerCmd = {
    val containerPorts = DefaultContainerPorts.map(ExposedPort.tcp)
    val ports          = new Ports()
    containerPorts.zip(hostPorts).foreach { case (containerPort, hostPort) =>
      ports.bind(containerPort, Ports.Binding.bindPort(hostPort))
    }
    super
      .newCreateContainerCmd()
      .withEnv(environmentVariables.map { case (k, v) => s"$k=$v" }.toArray: _*)
      .withExposedPorts(containerPorts.toList.asJava)
      .withHostConfig(newHostConfig().withPortBindings(ports))
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy