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

akka.rabbitmq.RabbitMqActor.scala Maven / Gradle / Ivy

package com.newmotion.akka.rabbitmq

import scala.util._
import akka.actor.Actor
import akka.event.LoggingAdapter
import com.rabbitmq.client.{ ShutdownListener, ShutdownSignalException }
import java.io.IOException
import java.util.concurrent.TimeoutException

/**
 * @author Yaroslav Klymko
 */
trait RabbitMqActor extends Actor with ShutdownListener {
  def log: LoggingAdapter

  def shutdownCompleted(cause: ShutdownSignalException): Unit = {
    log.debug("on shutdownCompleted {}", cause)
    self ! AmqpShutdownSignal(cause)
  }

  def close(x: AutoCloseable): Unit = Try {
    x.close()
  } match {
    case Success(_) =>
      log.debug("close success")
    case Failure(throwable) =>
      log.error("close {}", throwable)
  }

  def safe[T](f: => T): Option[T] = Try {
    f
  } match {
    case Success(result)                     => Some(result)
    case Failure(_: IOException)             => None
    case Failure(_: ShutdownSignalException) => None
    case Failure(_: TimeoutException)        => None
    case Failure(throwable)                  => throw throwable
  }
}

sealed trait ShutdownSignal
case class AmqpShutdownSignal(cause: ShutdownSignalException) extends ShutdownSignal {
  def appliesTo(x: AnyRef) = cause.getReference eq x
}
case object ParentShutdownSignal extends ShutdownSignal




© 2015 - 2024 Weber Informatics LLC | Privacy Policy