![JAR search and dependency download from the Maven repository](/logo.png)
backbone.publisher.Publisher.scala Maven / Gradle / Ivy
The newest version!
package backbone.publisher
import akka.Done
import akka.actor.{ActorRef, ActorSystem}
import akka.stream.alpakka.sns.scaladsl.SnsPublisher
import akka.stream.scaladsl.{Flow, Keep, Sink, Source}
import akka.stream.{ActorMaterializer, ActorMaterializerSettings, OverflowStrategy, Supervision}
import backbone.MessageWriter
import backbone.publisher.Publisher.Settings
import com.amazonaws.services.sns.AmazonSNSAsync
import scala.concurrent.Future
object Publisher {
case class Settings(topicArn: String)
}
/**
* INTERNAL API
*/
private[backbone] class Publisher(settings: Settings)(implicit system: ActorSystem, sns: AmazonSNSAsync) {
private[this] implicit val mat = ActorMaterializer(
ActorMaterializerSettings(system).withSupervisionStrategy(_ => Supervision.Resume)
)
def publishAsync[T](messages: List[T])(implicit mw: MessageWriter[T]): Future[Done] = {
Source(messages)
.runWith(sink)
}
def sink[T](implicit mw: MessageWriter[T]): Sink[T, Future[Done]] = {
Flow[T]
.map(mw.write)
.log(getClass.getName, t => s"Publishing message to SNS. $t")
.toMat(SnsPublisher.sink(settings.topicArn))(Keep.right)
}
def actor[T](bufferSize: Int, overflowStrategy: OverflowStrategy)(implicit mw: MessageWriter[T]): ActorRef = {
Source
.actorRef(bufferSize, overflowStrategy)
.to(sink)
.run()
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy