akka.stream.ActorMaterializerSettings Scala Examples
The following examples show how to use akka.stream.ActorMaterializerSettings.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example.
Example 1
Source File: Test6.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.akkastream.example import akka.actor.{Actor, ActorSystem, Props} import akka.stream.scaladsl.Sink import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import org.apache.gearpump.akkastream.GearpumpMaterializer import org.apache.gearpump.akkastream.scaladsl.GearSource import org.apache.gearpump.cluster.main.{ArgumentsParser, CLIOption} import org.apache.gearpump.streaming.dsl.scalaapi.CollectionDataSource import org.apache.gearpump.util.AkkaApp import scala.concurrent.Await import scala.concurrent.duration._ import org.apache.gearpump.akkastream.scaladsl.Implicits._ object Test6 extends AkkaApp with ArgumentsParser { // scalastyle:off println override val options: Array[(String, CLIOption[Any])] = Array( "gearpump" -> CLIOption[Boolean]("<boolean>", required = false, defaultValue = Some(false)) ) override def main(akkaConf: Config, args: Array[String]): Unit = { val config = parse(args) implicit val system = ActorSystem("Test6", akkaConf) implicit val materializer: ActorMaterializer = config.getBoolean("gearpump") match { case true => GearpumpMaterializer() case false => ActorMaterializer( ActorMaterializerSettings(system).withAutoFusing(false) ) } val echo = system.actorOf(Props(Echo())) val sink = Sink.actorRef(echo, "COMPLETE") val sourceData = new CollectionDataSource( List( "this is a good start", "this is a good time", "time to start", "congratulations", "green plant", "blue sky") ) val source = GearSource.from[String](sourceData) source.mapConcat({line => line.split(" ").toList }).groupBy2(x => x) .map(word => (word, 1)) .reduce({(a, b) => (a._1, a._2 + b._2) }) .log("word-count") .runWith(sink) Await.result(system.whenTerminated, 60.minutes) } case class Echo() extends Actor { def receive: Receive = { case any: AnyRef => println("Confirm received: " + any) } } // scalastyle:on println }
Example 2
Source File: Test3.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.akkastream.example import akka.actor.{Actor, ActorSystem, Props} import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import org.apache.gearpump.akkastream.GearpumpMaterializer import org.apache.gearpump.akkastream.scaladsl.GearSource import akka.stream.scaladsl.Sink import org.apache.gearpump.cluster.main.{ArgumentsParser, CLIOption} import org.apache.gearpump.streaming.dsl.scalaapi.CollectionDataSource import org.apache.gearpump.util.AkkaApp import scala.concurrent.Await import scala.concurrent.duration._ object Test3 extends AkkaApp with ArgumentsParser { // scalastyle:off println override val options: Array[(String, CLIOption[Any])] = Array( "gearpump" -> CLIOption[Boolean]("<boolean>", required = false, defaultValue = Some(false)) ) override def main(akkaConf: Config, args: Array[String]): Unit = { val config = parse(args) implicit val system = ActorSystem("Test3", akkaConf) implicit val materializer: ActorMaterializer = config.getBoolean("gearpump") match { case true => GearpumpMaterializer() case false => ActorMaterializer( ActorMaterializerSettings(system).withAutoFusing(false) ) } val echo = system.actorOf(Props(new Echo())) val sink = Sink.actorRef(echo, "COMPLETE") val sourceData = new CollectionDataSource( List("red hat", "yellow sweater", "blue jack", "red apple", "green plant", "blue sky")) val source = GearSource.from[String](sourceData) source.filter(_.startsWith("red")).map("I want to order item: " + _).runWith(sink) Await.result(system.whenTerminated, 60.minutes) } class Echo extends Actor { def receive: Receive = { case any: AnyRef => println("Confirm received: " + any) } } // scalastyle:on println }
Example 3
Source File: Test9.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.akkastream.example import akka.NotUsed import akka.actor.{Actor, ActorSystem, Props} import akka.stream.{ActorMaterializer, ActorMaterializerSettings, ClosedShape} import akka.stream.scaladsl._ import org.apache.gearpump.akkastream.GearpumpMaterializer import org.apache.gearpump.cluster.main.{ArgumentsParser, CLIOption} import org.apache.gearpump.util.AkkaApp import scala.concurrent.Await import scala.concurrent.duration._ object Test9 extends AkkaApp with ArgumentsParser { // scalastyle:off println override val options: Array[(String, CLIOption[Any])] = Array( "gearpump" -> CLIOption[Boolean]("<boolean>", required = false, defaultValue = Some(false)) ) override def main(akkaConf: Config, args: Array[String]): Unit = { val config = parse(args) implicit val system = ActorSystem("Test9", akkaConf) implicit val materializer: ActorMaterializer = config.getBoolean("gearpump") match { case true => GearpumpMaterializer() case false => ActorMaterializer( ActorMaterializerSettings(system).withAutoFusing(false) ) } implicit val ec = system.dispatcher val sinkActor = system.actorOf(Props(new SinkActor())) val source = Source((1 to 5)) val sink = Sink.actorRef(sinkActor, "COMPLETE") val flowA: Flow[Int, Int, NotUsed] = Flow[Int].map { x => println(s"processing broadcasted element : $x in flowA"); x } val flowB: Flow[Int, Int, NotUsed] = Flow[Int].map { x => println(s"processing broadcasted element : $x in flowB"); x } val graph = RunnableGraph.fromGraph(GraphDSL.create() { implicit b => import GraphDSL.Implicits._ val broadcast = b.add(Broadcast[Int](2)) val merge = b.add(Merge[Int](2)) source ~> broadcast broadcast ~> flowA ~> merge broadcast ~> flowB ~> merge merge ~> sink ClosedShape }) graph.run() Await.result(system.whenTerminated, 60.minutes) } class SinkActor extends Actor { def receive: Receive = { case any: AnyRef => println("Confirm received: " + any) } } // scalastyle:on println }
Example 4
Source File: Test8.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.akkastream.example import akka.NotUsed import akka.actor.ActorSystem import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import akka.stream.scaladsl._ import org.apache.gearpump.akkastream.GearpumpMaterializer import org.apache.gearpump.cluster.main.{ArgumentsParser, CLIOption} import org.apache.gearpump.util.AkkaApp import scala.concurrent.{Await, Future} import scala.concurrent.duration._ object Test8 extends AkkaApp with ArgumentsParser { // scalastyle:off println override val options: Array[(String, CLIOption[Any])] = Array( "gearpump" -> CLIOption[Boolean]("<boolean>", required = false, defaultValue = Some(false)) ) override def main(akkaConf: Config, args: Array[String]): Unit = { val config = parse(args) implicit val system = ActorSystem("Test8", akkaConf) implicit val materializer: ActorMaterializer = config.getBoolean("gearpump") match { case true => GearpumpMaterializer() case false => ActorMaterializer( ActorMaterializerSettings(system).withAutoFusing(false) ) } implicit val ec = system.dispatcher // Source gives 1 to 100 elements val source: Source[Int, NotUsed] = Source(Stream.from(1).take(100)) val sink: Sink[Int, Future[Int]] = Sink.fold[Int, Int](0)(_ + _) val result: Future[Int] = source.runWith(sink) result.map(sum => { println(s"Sum of stream elements => $sum") }) Await.result(system.whenTerminated, 60.minutes) } // scalastyle:on println }
Example 5
Source File: ResumingEventFilter.scala From 006877 with MIT License | 5 votes |
package aia.stream import java.nio.file.{ Path, Paths } import java.nio.file.StandardOpenOption import java.nio.file.StandardOpenOption._ import scala.concurrent.Future import akka.NotUsed import akka.actor.ActorSystem import akka.stream.{ ActorMaterializer, IOResult } import akka.util.ByteString import spray.json._ import com.typesafe.config.{ Config, ConfigFactory } object ResumingEventFilter extends App with EventMarshalling { val config = ConfigFactory.load() val maxLine = config.getInt("log-stream-processor.max-line") if(args.length != 3) { System.err.println("Provide args: input-file output-file state") System.exit(1) } val inputFile = FileArg.shellExpanded(args(0)) val outputFile = FileArg.shellExpanded(args(1)) val filterState = args(2) match { case State(state) => state case unknown => System.err.println(s"Unknown state $unknown, exiting.") System.exit(1) } import akka.stream.scaladsl._ val source: Source[ByteString, Future[IOResult]] = FileIO.fromPath(inputFile) val sink: Sink[ByteString, Future[IOResult]] = FileIO.toPath(outputFile, Set(CREATE, WRITE, APPEND)) val frame: Flow[ByteString, String, NotUsed] = Framing.delimiter(ByteString("\n"), maxLine) .map(_.decodeString("UTF8")) import akka.stream.ActorAttributes import akka.stream.Supervision import LogStreamProcessor.LogParseException val decider : Supervision.Decider = { case _: LogParseException => Supervision.Resume case _ => Supervision.Stop } val parse: Flow[String, Event, NotUsed] = Flow[String].map(LogStreamProcessor.parseLineEx) .collect { case Some(e) => e } .withAttributes(ActorAttributes.supervisionStrategy(decider)) val filter: Flow[Event, Event, NotUsed] = Flow[Event].filter(_.state == filterState) val serialize: Flow[Event, ByteString, NotUsed] = Flow[Event].map(event => ByteString(event.toJson.compactPrint)) implicit val system = ActorSystem() implicit val ec = system.dispatcher val graphDecider : Supervision.Decider = { case _: LogParseException => Supervision.Resume case _ => Supervision.Stop } import akka.stream.ActorMaterializerSettings implicit val materializer = ActorMaterializer( ActorMaterializerSettings(system) .withSupervisionStrategy(graphDecider) ) val composedFlow: Flow[ByteString, ByteString, NotUsed] = frame.via(parse) .via(filter) .via(serialize) val runnableGraph: RunnableGraph[Future[IOResult]] = source.via(composedFlow).toMat(sink)(Keep.right) runnableGraph.run().foreach { result => println(s"Wrote ${result.count} bytes to '$outputFile'.") system.terminate() } }
Example 6
Source File: FanLogsApp.scala From 006877 with MIT License | 5 votes |
package aia.stream import java.nio.file.{ Files, FileSystems, Path } import scala.concurrent.Future import scala.concurrent.duration._ import akka.NotUsed import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.stream.{ ActorMaterializer, ActorMaterializerSettings, Supervision } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import com.typesafe.config.{ Config, ConfigFactory } object FanLogsApp extends App { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") val logsDir = { val dir = config.getString("log-stream-processor.logs-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val maxLine = config.getInt("log-stream-processor.max-line") val maxJsObject = config.getInt("log-stream-processor.max-json-object") implicit val system = ActorSystem() implicit val ec = system.dispatcher val decider : Supervision.Decider = { case _: LogStreamProcessor.LogParseException => Supervision.Resume case _ => Supervision.Stop } implicit val materializer = ActorMaterializer( ActorMaterializerSettings(system) .withSupervisionStrategy(decider) ) val api = new FanLogsApi(logsDir, maxLine, maxJsObject).routes val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "fan-logs") bindingFuture.map { serverBinding => log.info(s"Bound to ${serverBinding.localAddress} ") }.onFailure { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } }
Example 7
Source File: LogsApp.scala From 006877 with MIT License | 5 votes |
package aia.stream import java.nio.file.{ Files, FileSystems, Path } import scala.concurrent.Future import scala.concurrent.duration._ import akka.NotUsed import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.stream.{ ActorMaterializer, ActorMaterializerSettings, Supervision } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import com.typesafe.config.{ Config, ConfigFactory } object LogsApp extends App { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") val logsDir = { val dir = config.getString("log-stream-processor.logs-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val maxLine = config.getInt("log-stream-processor.max-line") implicit val system = ActorSystem() implicit val ec = system.dispatcher val decider : Supervision.Decider = { case _: LogStreamProcessor.LogParseException => Supervision.Stop case _ => Supervision.Stop } implicit val materializer = ActorMaterializer( ActorMaterializerSettings(system) .withSupervisionStrategy(decider) ) val api = new LogsApi(logsDir, maxLine).routes val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "logs") bindingFuture.map { serverBinding => log.info(s"Bound to ${serverBinding.localAddress} ") }.onFailure { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } }
Example 8
Source File: LogStreamProcessorApp.scala From 006877 with MIT License | 5 votes |
package aia.stream import java.nio.file.{ Files, FileSystems, Path } import scala.concurrent.Future import scala.concurrent.duration._ import akka.NotUsed import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.stream.{ ActorMaterializer, ActorMaterializerSettings, Supervision } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import com.typesafe.config.{ Config, ConfigFactory } object LogStreamProcessorApp extends App { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") val logsDir = { val dir = config.getString("log-stream-processor.logs-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val notificationsDir = { val dir = config.getString("log-stream-processor.notifications-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val metricsDir = { val dir = config.getString("log-stream-processor.metrics-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val maxLine = config.getInt("log-stream-processor.max-line") val maxJsObject = config.getInt("log-stream-processor.max-json-object") implicit val system = ActorSystem() implicit val ec = system.dispatcher val decider : Supervision.Decider = { case _: LogStreamProcessor.LogParseException => Supervision.Resume case _ => Supervision.Stop } implicit val materializer = ActorMaterializer( ActorMaterializerSettings(system) .withSupervisionStrategy(decider) ) val api = new LogStreamProcessorApi(logsDir, notificationsDir, metricsDir, maxLine, maxJsObject).routes val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "processor") bindingFuture.map { serverBinding => log.info(s"Bound to ${serverBinding.localAddress} ") }.onFailure { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } }
Example 9
Source File: ContentNegLogsApp.scala From 006877 with MIT License | 5 votes |
package aia.stream import java.nio.file.{ Files, FileSystems, Path } import scala.concurrent.Future import scala.concurrent.duration._ import akka.NotUsed import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.stream.{ ActorMaterializer, ActorMaterializerSettings, Supervision } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import com.typesafe.config.{ Config, ConfigFactory } object ContentNegLogsApp extends App { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") val logsDir = { val dir = config.getString("log-stream-processor.logs-dir") Files.createDirectories(FileSystems.getDefault.getPath(dir)) } val maxLine = config.getInt("log-stream-processor.max-line") val maxJsObject = config.getInt("log-stream-processor.max-json-object") implicit val system = ActorSystem() implicit val ec = system.dispatcher val decider : Supervision.Decider = { case _: LogStreamProcessor.LogParseException => Supervision.Stop case _ => Supervision.Stop } implicit val materializer = ActorMaterializer( ActorMaterializerSettings(system) .withSupervisionStrategy(decider) ) val api = new ContentNegLogsApi(logsDir, maxLine, maxJsObject).routes val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "content-neg-logs") bindingFuture.map { serverBinding => log.info(s"Bound to ${serverBinding.localAddress} ") }.onFailure { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } }
Example 10
Source File: HandlingErrorsApplication.scala From Akka-Cookbook with MIT License | 5 votes |
package com.packt.chapter8 import akka.actor.ActorSystem import akka.stream.{ActorAttributes, ActorMaterializer, ActorMaterializerSettings, Supervision} import akka.stream.scaladsl._ object HandlingErrorsApplication extends App { implicit val actorSystem = ActorSystem("HandlingErrors") val streamDecider: Supervision.Decider = { case e: IndexOutOfBoundsException => println("Dropping element because of IndexOufOfBoundException. Resuming.") Supervision.Resume case _ => Supervision.Stop } val flowDecider: Supervision.Decider = { case e: IllegalArgumentException => println("Dropping element because of IllegalArgumentException. Restarting.") Supervision.Restart case _ => Supervision.Stop } val actorMaterializerSettings = ActorMaterializerSettings(actorSystem).withSupervisionStrategy(streamDecider) implicit val actorMaterializer = ActorMaterializer(actorMaterializerSettings) val words = List("Handling", "Errors", "In", "Akka", "Streams", "") val flow = Flow[String].map(word => { if(word.length == 0) throw new IllegalArgumentException("Empty words are not allowed") word }).withAttributes(ActorAttributes.supervisionStrategy(flowDecider)) Source(words).via(flow).map(array => array(2)).to(Sink.foreach(println)).run() }
Example 11
Source File: RemoraApp.scala From remora with MIT License | 5 votes |
import java.io.IOException import java.net.ConnectException import java.util.concurrent.{TimeUnit, TimeoutException} import akka.actor.ActorSystem import akka.stream.{ActorMaterializer, ActorMaterializerSettings, Supervision} import com.amazonaws.services.cloudwatch.{AmazonCloudWatchAsync, AmazonCloudWatchAsyncClientBuilder} import com.blacklocus.metrics.CloudWatchReporterBuilder import com.codahale.metrics.jvm.{GarbageCollectorMetricSet, MemoryUsageGaugeSet, ThreadStatesGaugeSet} import com.typesafe.scalalogging.LazyLogging import config.{KafkaSettings, MetricsSettings} import kafka.admin.RemoraKafkaConsumerGroupService import reporter.RemoraDatadogReporter import scala.concurrent.duration._ import scala.util.control.NonFatal object RemoraApp extends App with nl.grons.metrics.scala.DefaultInstrumented with LazyLogging { private val actorSystemName: String = "remora" implicit val actorSystem = ActorSystem(actorSystemName) metricRegistry.registerAll(new GarbageCollectorMetricSet) metricRegistry.registerAll(new MemoryUsageGaugeSet) metricRegistry.registerAll(new ThreadStatesGaugeSet) lazy val decider: Supervision.Decider = { case _: IOException | _: ConnectException | _: TimeoutException => Supervision.Restart case NonFatal(err: Throwable) => actorSystem.log.error(err, "Unhandled Exception in Stream: {}", err.getMessage) Supervision.Stop } implicit val materializer = ActorMaterializer( ActorMaterializerSettings(actorSystem).withSupervisionStrategy(decider))(actorSystem) implicit val executionContext = actorSystem.dispatchers.lookup("kafka-consumer-dispatcher") val kafkaSettings = KafkaSettings(actorSystem.settings.config) val consumer = new RemoraKafkaConsumerGroupService(kafkaSettings) val kafkaClientActor = actorSystem.actorOf(KafkaClientActor.props(consumer), name = "kafka-client-actor") Api(kafkaClientActor).start() val metricsSettings = MetricsSettings(actorSystem.settings.config) if (metricsSettings.registryOptions.enabled) { val exportConsumerMetricsToRegistryActor = actorSystem.actorOf(ExportConsumerMetricsToRegistryActor.props(kafkaClientActor), name = "export-consumer-metrics-actor") actorSystem.scheduler.schedule(0 second, metricsSettings.registryOptions.intervalSeconds second, exportConsumerMetricsToRegistryActor, "export") } if (metricsSettings.cloudWatch.enabled) { logger.info("Reporting metricsRegistry to Cloudwatch") val amazonCloudWatchAsync: AmazonCloudWatchAsync = AmazonCloudWatchAsyncClientBuilder.defaultClient new CloudWatchReporterBuilder() .withNamespace(metricsSettings.cloudWatch.name) .withRegistry(metricRegistry) .withClient(amazonCloudWatchAsync) .build() .start(metricsSettings.cloudWatch.intervalMinutes, TimeUnit.MINUTES) } if (metricsSettings.dataDog.enabled) { logger.info(s"Reporting metricsRegistry to Datadog at ${metricsSettings.dataDog.agentHost}:${metricsSettings.dataDog.agentPort}") val datadogReporter = new RemoraDatadogReporter(metricRegistry, metricsSettings.dataDog) datadogReporter.startReporter() } }
Example 12
Source File: NakadiClientImpl.scala From reactive-nakadi with MIT License | 5 votes |
package org.zalando.react.nakadi.client import akka.actor.{Actor, ActorLogging, ActorRef, Props} import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import org.zalando.react.nakadi.NakadiMessages.{EventTypeMessage, ProducerMessage} import org.zalando.react.nakadi.client.providers._ import org.zalando.react.nakadi.properties.{ConsumerProperties, ProducerProperties, ServerProperties} import akka.pattern._ import scala.concurrent.Future case class Properties( serverProperties: ServerProperties, tokenProvider: Option[() => String], consumerProperties: Option[ConsumerProperties] = None, producerProperties: Option[ProducerProperties] = None ) object NakadiClientImpl { def props(consumerProperties: ConsumerProperties) = { val p = Properties( serverProperties = consumerProperties.serverProperties, tokenProvider = consumerProperties.tokenProvider, consumerProperties = Option(consumerProperties) ) Props(new NakadiClientImpl(p)) } def props(producerProperties: ProducerProperties) = { val p = Properties( serverProperties = producerProperties.serverProperties, tokenProvider = producerProperties.tokenProvider, producerProperties = Option(producerProperties) ) Props(new NakadiClientImpl(p)) } case object MessagePublished } class NakadiClientImpl(val properties: Properties) extends Actor with ActorLogging with NakadiClient { import NakadiClientImpl.MessagePublished final implicit val materializer = ActorMaterializer(ActorMaterializerSettings(context.system)) implicit val ec = context.dispatcher val clientProvider = new HttpClientProvider( actorContext = context, server = properties.serverProperties.host, port = properties.serverProperties.port, isConnectionSSL = properties.serverProperties.isConnectionSSL, acceptAnyCertificate = properties.serverProperties.acceptAnyCertificate, connectionTimeout = properties.serverProperties.connectionTimeout ) override def postStop() = clientProvider.http.shutdownAllConnectionPools() override def receive: Receive = { case ConsumeCommand.Start => listenForEvents(sender()) case producerMessage: ProducerMessage => publishEvent(producerMessage).map(_ => MessagePublished) pipeTo sender() case eventTypeMessage: EventTypeMessage => postEventType(eventTypeMessage: EventTypeMessage) } override def postEventType(eventTypeMessage: EventTypeMessage): Future[Unit] = { val postEvents = new PostEventType(properties, context, log, clientProvider) postEvents.post(eventTypeMessage) } override def publishEvent(producerMessage: ProducerMessage): Future[Unit] = { val p = properties.producerProperties.getOrElse(sys.error("Producer Properties cannon be None")) val produceEvents = new ProduceEvents(p, context, log, clientProvider) produceEvents.publish(producerMessage) } override def listenForEvents(receiverActorRef: ActorRef): Unit = { val p = properties.consumerProperties.getOrElse(sys.error("Consumer Properties cannon be None")) val consumeEvents = new ConsumeEvents(p, context, log, clientProvider) consumeEvents.stream(receiverActorRef) } }
Example 13
Source File: Main.scala From distributed-cache-on-k8s-poc with MIT License | 5 votes |
import akka.actor.ActorSystem import akka.event.Logging import akka.http.scaladsl.Http import akka.stream.{ ActorMaterializer, ActorMaterializerSettings } import cluster.ClusterStateInformer import com.typesafe.config.{ Config, ConfigFactory, ConfigValueFactory } import http.Route import scala.util.{ Failure, Success } import scala.concurrent.ExecutionContext.Implicits.global object Main { def main(args: Array[String]): Unit = { val config: Config = { import scala.collection.JavaConverters._ val seedNodes = ClusterSetup.seedNodes() ConfigFactory.empty() .withValue("akka.cluster.seed-nodes", ConfigValueFactory.fromIterable(seedNodes.map(seedNode => s"akka.tcp://${ClusterSetup.actorSystemName()}@$seedNode").asJava)) .withValue("akka.remote.netty.tcp.hostname", ConfigValueFactory.fromAnyRef(ClusterSetup.podName() + "." + ClusterSetup.domain())) .withValue("akka.remote.netty.tcp.port", ConfigValueFactory.fromAnyRef(ClusterSetup.remoteBindingPort())) .withFallback(ConfigFactory.load()) .resolve() } implicit val system: ActorSystem = ActorSystem(ClusterSetup.actorSystemName(), config) val logging = Logging(system, "main") implicit val mat = ActorMaterializer(materializerSettings = Some(ActorMaterializerSettings(system))) val routes = new Route(system) Http().bindAndHandle(routes.routes, "0.0.0.0", 9000).onComplete { case Success(s) => logging.info("Successfully started") case Failure(f) => logging.error(f, "Server cannot be started!!!!") } system.actorOf(ClusterStateInformer.props(), "cluster-informer") } } object ClusterSetup { def seedNodes(): Iterable[String] = sys.env.get("AKKA_SEED_NODES").map(_.split(",")).get.toIterable def domain(): String = sys.env.getOrElse("AKKA_REMOTING_BIND_DOMAIN", throw new RuntimeException("No domain found.")) def podName(): String = sys.env.getOrElse("POD_NAME", throw new RuntimeException("No podname found.")) def remoteBindingPort(): String = sys.env.getOrElse("AKKA_REMOTING_BIND_PORT", throw new RuntimeException("No port found.")) def actorSystemName(): String = sys.env.getOrElse("AKKA_ACTOR_SYSTEM_NAME", throw new RuntimeException("No actorsystem name found.")) }
Example 14
Source File: AkkaPi.scala From swave with Mozilla Public License 2.0 | 5 votes |
package swave.docs import scala.util.{Failure, Success} import akka.NotUsed import akka.actor.ActorSystem import akka.stream.scaladsl._ import akka.stream.{ActorMaterializer, ActorMaterializerSettings, FlowShape} import swave.core.util.XorShiftRandom object AkkaPi extends App { implicit val system = ActorSystem("AkkaPi") import system.dispatcher private val settings = ActorMaterializerSettings(system).withSyncProcessingLimit(Int.MaxValue).withInputBuffer(256, 256) implicit val materializer = ActorMaterializer(settings) val random = XorShiftRandom() Source .fromIterator(() ⇒ Iterator.continually(random.nextDouble())) .grouped(2) .map { case x +: y +: Nil ⇒ Point(x, y) } .via(broadcastFilterMerge) .scan(State(0, 0)) { _ withNextSample _ } .splitWhen(_.totalSamples % 1000000 == 1) .drop(999999) .concatSubstreams .map(state ⇒ f"After ${state.totalSamples}%,10d samples π is approximated as ${state.π}%.6f") .take(30) .runForeach(println) .onComplete { case Success(_) => val time = System.currentTimeMillis() - system.startTime println(f"Done. Total time: $time%,6d ms, Throughput: ${30000.0 / time}%.3fM samples/sec\n") system.terminate() case Failure(e) => println(e) } println("Main thread exit.") /////////////////////////////////////////// def broadcastFilterMerge: Flow[Point, Sample, NotUsed] = Flow.fromGraph(GraphDSL.create() { implicit b => import GraphDSL.Implicits._ val broadcast = b.add(Broadcast[Point](2)) // split one upstream into 2 downstreams val filterInner = b.add(Flow[Point].filter(_.isInner).map(_ => InnerSample)) val filterOuter = b.add(Flow[Point].filterNot(_.isInner).map(_ => OuterSample)) val merge = b.add(Merge[Sample](2)) // merge 2 upstreams into one downstream broadcast.out(0) ~> filterInner ~> merge.in(0) broadcast.out(1) ~> filterOuter ~> merge.in(1) FlowShape(broadcast.in, merge.out) }) //////////////// MODEL /////////////// case class Point(x: Double, y: Double) { def isInner: Boolean = x * x + y * y < 1.0 } sealed trait Sample case object InnerSample extends Sample case object OuterSample extends Sample case class State(totalSamples: Long, inCircle: Long) { def π: Double = (inCircle.toDouble / totalSamples) * 4.0 def withNextSample(sample: Sample) = State(totalSamples + 1, if (sample == InnerSample) inCircle + 1 else inCircle) } }
Example 15
Source File: AkkaPiThrottled.scala From swave with Mozilla Public License 2.0 | 5 votes |
package swave.docs import scala.util.{Failure, Success} import scala.concurrent.duration._ import akka.NotUsed import akka.actor.ActorSystem import akka.stream.scaladsl._ import akka.stream.{ActorMaterializer, ActorMaterializerSettings, FlowShape, ThrottleMode} import swave.core.util.XorShiftRandom object AkkaPiThrottled extends App { implicit val system = ActorSystem("AkkaPi") import system.dispatcher private val settings = ActorMaterializerSettings(system) implicit val materializer = ActorMaterializer(settings) val random = XorShiftRandom() Source .fromIterator(() ⇒ Iterator.continually(random.nextDouble())) .grouped(2) .map { case x +: y +: Nil ⇒ Point(x, y) } .via(broadcastFilterMerge) .scan(State(0, 0)) { _ withNextSample _ } .conflate(Keep.right) .throttle(1, 1.second, 0, ThrottleMode.Shaping) .map { state ⇒ println(f"After ${state.totalSamples}%,10d samples π is approximated as ${state.π}%.6f"); state } .take(20) .runWith(Sink.last) .onComplete { case Success(State(totalSamples, _)) => val time = System.currentTimeMillis() - system.startTime val throughput = totalSamples / 1000.0 / time println(f"Done. Total time: $time%,6d ms, Throughput: $throughput%.3fM samples/sec\n") system.terminate() case Failure(e) => println(e) } println("Main thread exit.") /////////////////////////////////////////// def broadcastFilterMerge: Flow[Point, Sample, NotUsed] = Flow.fromGraph(GraphDSL.create() { implicit b => import GraphDSL.Implicits._ val broadcast = b.add(Broadcast[Point](2)) // split one upstream into 2 downstreams val filterInner = b.add(Flow[Point].filter(_.isInner).map(_ => InnerSample)) val filterOuter = b.add(Flow[Point].filterNot(_.isInner).map(_ => OuterSample)) val merge = b.add(Merge[Sample](2)) // merge 2 upstreams into one downstream broadcast.out(0) ~> filterInner ~> merge.in(0) broadcast.out(1) ~> filterOuter ~> merge.in(1) FlowShape(broadcast.in, merge.out) }) //////////////// MODEL /////////////// case class Point(x: Double, y: Double) { def isInner: Boolean = x * x + y * y < 1.0 } sealed trait Sample case object InnerSample extends Sample case object OuterSample extends Sample case class State(totalSamples: Long, inCircle: Long) { def π: Double = (inCircle.toDouble / totalSamples) * 4.0 def withNextSample(sample: Sample) = State(totalSamples + 1, if (sample == InnerSample) inCircle + 1 else inCircle) } }
Example 16
Source File: ElasticIndexer4s.scala From elastic-indexer4s with MIT License | 5 votes |
package com.yannick_cw.elastic_indexer4s import akka.NotUsed import akka.actor.ActorSystem import akka.stream.Supervision.Decider import akka.stream.scaladsl.Source import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import com.yannick_cw.elastic_indexer4s.elasticsearch.elasic_config.ElasticWriteConfig import com.sksamuel.elastic4s.Indexable import cats.instances.future.catsStdInstancesForFuture import com.sksamuel.elastic4s.streams.RequestBuilder import com.yannick_cw.elastic_indexer4s.elasticsearch.{ElasticseachInterpreter, EsAccess} import com.yannick_cw.elastic_indexer4s.indexing_logic.{IndexOps, IndexableStream, IndexingWithEs} import com.sksamuel.elastic4s.http.ElasticDsl._ import scala.concurrent.{ExecutionContext, Future} class ElasticIndexer4s(esConf: ElasticWriteConfig)(implicit system: ActorSystem, materializer: ActorMaterializer, ex: ExecutionContext) { def fromBuilder[Entity: RequestBuilder](source: Source[Entity, NotUsed]): IndexableStream[Entity, Future] = { implicit val esAccess: EsAccess[Future] = new ElasticseachInterpreter(esConf) implicit val indexOps: IndexOps[Future] = new IndexingWithEs[Future]() new IndexableStream[Entity, Future](source, () => Future(esConf.client.close())) } def withDecider(decider: Decider): ElasticIndexer4s = { val materializer = ActorMaterializer(ActorMaterializerSettings(system).withSupervisionStrategy(decider)) new ElasticIndexer4s(esConf)(system, materializer, ex) } } object ElasticIndexer4s { def apply(esConf: ElasticWriteConfig, system: ActorSystem, materializer: ActorMaterializer, ex: ExecutionContext): ElasticIndexer4s = new ElasticIndexer4s(esConf)(system, materializer, ex) def apply(esConf: ElasticWriteConfig): ElasticIndexer4s = { implicit val system = ActorSystem() implicit val ex = system.dispatcher implicit val materializer = ActorMaterializer() new ElasticIndexer4s(esConf) } }