akka.http.scaladsl.Http.ServerBinding Scala Examples
The following examples show how to use akka.http.scaladsl.Http.ServerBinding.
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: AbstractWebServer.scala From ohara with Apache License 2.0 | 6 votes |
package oharastream.ohara.shabondi.common import akka.Done import akka.actor.ActorSystem import akka.event.Logging import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.{Directives, Route} import akka.http.scaladsl.settings.ServerSettings import oharastream.ohara.common.util.Releasable import scala.concurrent._ import scala.concurrent.duration.Duration import scala.io.StdIn import scala.util.{Failure, Success} private[shabondi] abstract class AbstractWebServer extends Directives with Releasable { implicit protected val actorSystem: ActorSystem = ActorSystem(Logging.simpleName(this).replaceAll("\\$", "")) protected def routes: Route protected def postBinding(binding: ServerBinding): Unit = { val hostname = binding.localAddress.getHostName val port = binding.localAddress.getPort actorSystem.log.info(s"Server online at http://$hostname:$port/") } protected def postBindingFailure(cause: Throwable): Unit = { actorSystem.log.error(cause, s"Error starting the server ${cause.getMessage}") } protected def waitForShutdownSignal()(implicit ec: ExecutionContext): Future[Done] = { val promise = Promise[Done]() sys.addShutdownHook { promise.trySuccess(Done) } Future { blocking { if (StdIn.readLine("Press <RETURN> to stop Shabondi WebServer...\n") != null) promise.trySuccess(Done) } } promise.future } protected def postServerShutdown(): Unit = actorSystem.log.info("Shutting down the server") def start(bindInterface: String, port: Int): Unit = { start(bindInterface, port, ServerSettings(actorSystem)) } def start(bindInterface: String, port: Int, settings: ServerSettings): Unit = { implicit val executionContext: ExecutionContextExecutor = actorSystem.dispatcher val bindingFuture: Future[Http.ServerBinding] = Http().bindAndHandle( handler = routes, interface = bindInterface, port = port, settings = settings ) bindingFuture.onComplete { case Success(binding) => postBinding(binding) case Failure(cause) => postBindingFailure(cause) } Await.ready( bindingFuture.flatMap(_ => waitForShutdownSignal()), Duration.Inf ) bindingFuture .flatMap(_.unbind()) .onComplete { _ => postServerShutdown() actorSystem.terminate() } } override def close(): Unit = actorSystem.terminate() }
Example 2
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 3
Source File: Api.scala From whirlwind-tour-akka-typed with Apache License 2.0 | 5 votes |
package de.heikoseeberger.wtat import akka.actor.{ ActorSystem, Scheduler } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.StatusCodes.{ Conflict, Created, NoContent, NotFound } import akka.http.scaladsl.server.{ Directives, Route } import akka.stream.Materializer import akka.actor.typed.scaladsl.Actor import akka.actor.typed.scaladsl.AskPattern.Askable import akka.actor.typed.{ ActorRef, Behavior } import akka.util.Timeout import de.heikoseeberger.akkahttpcirce.ErrorAccumulatingCirceSupport import java.net.InetSocketAddress import org.apache.logging.log4j.scala.Logging import scala.concurrent.duration.FiniteDuration import scala.util.{ Failure, Success } object Api extends Logging { sealed trait Command private final case object HandleBindFailure extends Command private final case class HandleBound(address: InetSocketAddress) extends Command final val Name = "api" def apply(address: String, port: Int, userRepository: ActorRef[UserRepository.Command], userView: ActorRef[UserView.Command], askTimeout: FiniteDuration)(implicit mat: Materializer): Behavior[Command] = Actor.deferred { context => import akka.actor.typed.scaladsl.adapter._ import context.executionContext implicit val s: ActorSystem = context.system.toUntyped val self = context.self Http() .bindAndHandle(route(userRepository, userView)(askTimeout, context.system.scheduler), address, port) .onComplete { case Failure(_) => self ! HandleBindFailure case Success(ServerBinding(address)) => self ! HandleBound(address) } Actor.immutable { case (_, HandleBindFailure) => logger.error(s"Stopping, because cannot bind to $address:$port!") Actor.stopped case (_, HandleBound(address)) => logger.info(s"Bound to $address") Actor.ignore } } def route( userRepository: ActorRef[UserRepository.Command], userView: ActorRef[UserView.Command] )(implicit askTimeout: Timeout, scheduler: Scheduler): Route = { import Directives._ import ErrorAccumulatingCirceSupport._ import io.circe.generic.auto._ import io.circe.refined._ pathEndOrSingleSlash { get { complete { import UserView._ (userView ? GetUsers).mapTo[Users] } } ~ post { entity(as[User]) { user => import UserRepository._ onSuccess(userRepository ? addUser(user)) { case UsernameTaken(_) => complete(Conflict) case UserAdded(_) => complete(Created) } } } } ~ path(Segment) { username => delete { import UserRepository._ onSuccess(userRepository ? removeUser(username)) { case UsernameUnknown(_) => complete(NotFound) case UserRemoved(_) => complete(NoContent) } } } } }
Example 4
Source File: CorsBenchmark.scala From akka-http-cors with Apache License 2.0 | 5 votes |
package ch.megard.akka.http.cors import java.util.concurrent.TimeUnit import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.headers.{Origin, `Access-Control-Request-Method`} import akka.http.scaladsl.model.{HttpMethods, HttpRequest} import akka.http.scaladsl.server.Directives import akka.http.scaladsl.unmarshalling.Unmarshal import ch.megard.akka.http.cors.scaladsl.CorsDirectives import ch.megard.akka.http.cors.scaladsl.settings.CorsSettings import com.typesafe.config.ConfigFactory import org.openjdk.jmh.annotations._ import scala.concurrent.duration._ import scala.concurrent.{Await, ExecutionContext} @State(Scope.Benchmark) @OutputTimeUnit(TimeUnit.SECONDS) @BenchmarkMode(Array(Mode.Throughput)) class CorsBenchmark extends Directives with CorsDirectives { private val config = ConfigFactory.parseString("akka.loglevel = ERROR").withFallback(ConfigFactory.load()) implicit private val system: ActorSystem = ActorSystem("CorsBenchmark", config) implicit private val ec: ExecutionContext = scala.concurrent.ExecutionContext.global private val http = Http() private val corsSettings = CorsSettings.default private var binding: ServerBinding = _ private var request: HttpRequest = _ private var requestCors: HttpRequest = _ private var requestPreflight: HttpRequest = _ @Setup def setup(): Unit = { val route = { path("baseline") { get { complete("ok") } } ~ path("cors") { cors(corsSettings) { get { complete("ok") } } } } val origin = Origin("http://example.com") binding = Await.result(http.bindAndHandle(route, "127.0.0.1", 0), 1.second) val base = s"http://${binding.localAddress.getHostString}:${binding.localAddress.getPort}" request = HttpRequest(uri = base + "/baseline") requestCors = HttpRequest( method = HttpMethods.GET, uri = base + "/cors", headers = List(origin) ) requestPreflight = HttpRequest( method = HttpMethods.OPTIONS, uri = base + "/cors", headers = List(origin, `Access-Control-Request-Method`(HttpMethods.GET)) ) } @TearDown def shutdown(): Unit = { val f = for { _ <- http.shutdownAllConnectionPools() _ <- binding.terminate(1.second) _ <- system.terminate() } yield () Await.ready(f, 5.seconds) } @Benchmark def baseline(): Unit = { val f = http.singleRequest(request).flatMap(r => Unmarshal(r.entity).to[String]) assert(Await.result(f, 1.second) == "ok") } @Benchmark def default_cors(): Unit = { val f = http.singleRequest(requestCors).flatMap(r => Unmarshal(r.entity).to[String]) assert(Await.result(f, 1.second) == "ok") } @Benchmark def default_preflight(): Unit = { val f = http.singleRequest(requestPreflight).flatMap(r => Unmarshal(r.entity).to[String]) assert(Await.result(f, 1.second) == "") } }
Example 5
Source File: AkkaHttpServerTemplate.scala From akka-http-circe-json-template with Apache License 2.0 | 5 votes |
package com.vitorsvieira.http.server import akka.http.scaladsl.Http import akka.http.scaladsl.Http.{ IncomingConnection, ServerBinding } import akka.http.scaladsl.server.Route._ import akka.stream.scaladsl.{ Sink, Source } import com.vitorsvieira.http.config.ServerSettingsTemplate import com.vitorsvieira.http.routes.AkkaHttpRoutesTemplate import scala.concurrent.Future import scala.io.StdIn object AkkaHttpServerTemplate extends App { import ServerSettingsTemplate._ val server: Source[IncomingConnection, Future[ServerBinding]] = Http(actorSystem).bind(httpInterface, httpPort) log.info(s"\nAkka HTTP Server - Version ${actorSystem.settings.ConfigVersion} - running at http://$httpInterface:$httpPort/") val handler: Future[ServerBinding] = server .to( Sink.foreach { connection ⇒ connection.handleWithAsyncHandler(asyncHandler(AkkaHttpRoutesTemplate.availableRoutes)) } ) .run() handler.failed.foreach { case ex: Exception ⇒ log.error(ex, "Failed to bind to {}:{}", httpInterface, httpPort) } StdIn.readLine(s"\nPress RETURN to stop...") handler .flatMap(binding ⇒ binding.unbind()) .onComplete(_ ⇒ actorSystem.terminate()) }
Example 6
Source File: AkkaGrpcServerScala.scala From akka-grpc with Apache License 2.0 | 5 votes |
package akka.grpc.interop import java.io.FileInputStream import java.nio.file.{ Files, Paths } import java.security.cert.CertificateFactory import java.security.spec.PKCS8EncodedKeySpec import java.security.{ KeyFactory, KeyStore, SecureRandom } import scala.concurrent.duration._ import akka.actor.ActorSystem import akka.util.ByteString import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.{ HttpRequest, HttpResponse } import akka.http.scaladsl.{ Http2, HttpsConnectionContext } import akka.stream.SystemMaterializer import io.grpc.internal.testing.TestUtils import javax.net.ssl.{ KeyManagerFactory, SSLContext } import scala.concurrent.{ Await, Future } case class AkkaGrpcServerScala(serverHandlerFactory: ActorSystem => HttpRequest => Future[HttpResponse]) extends GrpcServer[(ActorSystem, ServerBinding)] { override def start() = { implicit val sys = ActorSystem() implicit val mat = SystemMaterializer(sys).materializer val testService = serverHandlerFactory(sys) val bindingFuture = Http2().bindAndHandleAsync( testService, interface = "127.0.0.1", port = 0, parallelism = 256, // TODO remove once https://github.com/akka/akka-http/pull/2146 is merged connectionContext = serverHttpContext()) val binding = Await.result(bindingFuture, 10.seconds) (sys, binding) } override def stop(binding: (ActorSystem, ServerBinding)) = binding match { case (sys, binding) => sys.log.info("Exception thrown, unbinding") Await.result(binding.unbind(), 10.seconds) Await.result(sys.terminate(), 10.seconds) } private def serverHttpContext() = { val keyEncoded = new String(Files.readAllBytes(Paths.get(TestUtils.loadCert("server1.key").getAbsolutePath)), "UTF-8") .replace("-----BEGIN PRIVATE KEY-----\n", "") .replace("-----END PRIVATE KEY-----\n", "") .replace("\n", "") val decodedKey = ByteString(keyEncoded).decodeBase64.toArray val spec = new PKCS8EncodedKeySpec(decodedKey) val kf = KeyFactory.getInstance("RSA") val privateKey = kf.generatePrivate(spec) val fact = CertificateFactory.getInstance("X.509") val is = new FileInputStream(TestUtils.loadCert("server1.pem")) val cer = fact.generateCertificate(is) val ks = KeyStore.getInstance("PKCS12") ks.load(null) ks.setKeyEntry("private", privateKey, Array.empty, Array(cer)) val keyManagerFactory = KeyManagerFactory.getInstance("SunX509") keyManagerFactory.init(ks, null) val context = SSLContext.getInstance("TLS") context.init(keyManagerFactory.getKeyManagers, null, new SecureRandom) new HttpsConnectionContext(context) } override def getPort(binding: (ActorSystem, ServerBinding)): Int = binding._2.localAddress.getPort }
Example 7
Source File: MainActor.scala From akka-http-extensions with Mozilla Public License 2.0 | 5 votes |
package org.denigma.preview import akka.actor._ import akka.http.scaladsl.Http.{IncomingConnection, ServerBinding} import akka.http.scaladsl.{Http, _} import akka.stream.ActorMaterializer import akka.stream.scaladsl.Source import org.denigma.preview.routes.Router import scala.concurrent.Future class MainActor extends Actor with ActorLogging // Routes { implicit val system = context.system implicit val materializer = ActorMaterializer() implicit val executionContext = system.dispatcher val server: HttpExt = Http(context.system) var serverSource: Source[IncomingConnection, Future[ServerBinding]] = null val router = new Router() override def receive: Receive = { case AppMessages.Start(config)=> val (host,port) = (config.getString("app.host") , config.getInt("app.port")) server.bindAndHandle(router.routes, host, port) log.info(s"starting server at $host:$port") case AppMessages.Stop=> onStop() } def onStop() = { log.info("Main actor has been stoped...") } override def postStop() = { onStop() } }
Example 8
Source File: HttpApi.scala From jwt-akka-http with MIT License | 5 votes |
package ba.codecentric import java.util.concurrent.TimeUnit import akka.actor.{ Actor, ActorLogging, Props } import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.StatusCodes import akka.http.scaladsl.model.headers.RawHeader import akka.http.scaladsl.server.{ Directive1, Route } import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import akka.pattern._ import scala.util.Failure object HttpApi { import de.heikoseeberger.akkahttpcirce.FailFastCirceSupport._ import io.circe.generic.auto._ import authentikat.jwt._ final val Name = "http-api" final val AccessTokenHeaderName = "X-Access-Token" final case class LoginRequest(username: String, password: String) private val tokenExpiryPeriodInDays = 1 private val secretKey = "super_secret_key" private val header = JwtHeader("HS256") private def login: Route = post { entity(as[LoginRequest]) { case lr @ LoginRequest("admin", "admin") => val claims = setClaims(lr.username, tokenExpiryPeriodInDays) respondWithHeader(RawHeader(AccessTokenHeaderName, JsonWebToken(header, claims, secretKey))) { complete(StatusCodes.OK) } case LoginRequest(_, _) => complete(StatusCodes.Unauthorized) } } private def securedContent: Route = get { authenticated { claims => complete(s"User: ${claims.getOrElse("user", "")} has accessed a secured content!") } } private def authenticated: Directive1[Map[String, Any]] = optionalHeaderValueByName("Authorization").flatMap { case Some(jwt) if isTokenExpired(jwt) => complete(StatusCodes.Unauthorized -> "Session expired.") case Some(jwt) if JsonWebToken.validate(jwt, secretKey) => provide(getClaims(jwt)) case _ => complete(StatusCodes.Unauthorized) } private def setClaims(username: String, expiryPeriodInDays: Long): JwtClaimsSetMap = JwtClaimsSet( Map("user" -> username, "expiredAt" -> (System.currentTimeMillis() + TimeUnit.DAYS .toMillis(expiryPeriodInDays))) ) private def getClaims(jwt: String): Map[String, String] = jwt match { case JsonWebToken(_, claims, _) => claims.asSimpleMap.getOrElse(Map.empty[String, String]) } private def isTokenExpired(jwt: String): Boolean = getClaims(jwt).get("expiredAt").exists(_.toLong < System.currentTimeMillis()) def routes: Route = login ~ securedContent def apply(host: String, port: Int) = Props(new HttpApi(host, port)) } final class HttpApi(host: String, port: Int) extends Actor with ActorLogging { import HttpApi._ import context.dispatcher private implicit val materializer: ActorMaterializer = ActorMaterializer() Http(context.system).bindAndHandle(routes, host, port).pipeTo(self) override def receive: Receive = { case ServerBinding(address) => log.info("Server successfully bound at {}:{}", address.getHostName, address.getPort) case Failure(cause) => log.error("Failed to bind server", cause) context.system.terminate() } }
Example 9
Source File: ServerExecutor.scala From graphcool-framework with Apache License 2.0 | 5 votes |
package cool.graph.akkautil.http import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import akka.http.scaladsl.server.Route import akka.stream.ActorMaterializer import ch.megard.akka.http.cors.scaladsl.CorsDirectives import ch.megard.akka.http.cors.scaladsl.CorsDirectives._ import scala.concurrent.duration.{Duration, _} import scala.concurrent.{Await, Future} case class ServerExecutor(port: Int, servers: Server*)(implicit system: ActorSystem, materializer: ActorMaterializer) { import system.dispatcher val routes: Route = { handleRejections(CorsDirectives.corsRejectionHandler) { cors() { val routes = servers.map(_.routes) :+ statusRoute routes.reduceLeft(_ ~ _) } } } def statusRoute: Route = (get & path("status")) { val checks = Future.sequence(servers.map(_.healthCheck)) onSuccess(checks) { _ => complete("OK") } } lazy val serverBinding: Future[ServerBinding] = { val binding = Http().bindAndHandle(Route.handlerFlow(routes), "0.0.0.0", port) binding.onSuccess { case b => println(s"Server running on :${b.localAddress.getPort}") } binding } def start: Future[_] = Future.sequence[Any, Seq](servers.map(_.onStart) :+ serverBinding) def stop: Future[_] = Future.sequence[Any, Seq](servers.map(_.onStop) :+ serverBinding.map(_.unbind)) // Starts the server and blocks the calling thread until the underlying actor system terminates. def startBlocking(duration: Duration = 15.seconds): Unit = { start Await.result(system.whenTerminated, Duration.Inf) } def stopBlocking(duration: Duration = 15.seconds): Unit = Await.result(stop, duration) }
Example 10
Source File: RestApiServer.scala From akka-blog-example with Apache License 2.0 | 5 votes |
package com.spr.akka import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.stream.Materializer import com.typesafe.config.ConfigFactory import scala.concurrent.Future class RestApiServer(api: RestApi)(implicit system: ActorSystem, materializer: Materializer) { def bind(): Future[ServerBinding] = { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") implicit val system = this.system implicit val materializer = this.materializer Http().bindAndHandle(api.route, host, port) } }
Example 11
Source File: WebService.scala From heimdallr with Apache License 2.0 | 5 votes |
package chat import scala.concurrent.ExecutionContext.Implicits._ import scala.util.{Failure,Success} import akka.actor.ActorSystem import akka.stream.Materializer import akka.http.scaladsl.Http import akka.http.scaladsl.Http.{ ServerBinding } import akka.http.scaladsl.model.{ HttpRequest, HttpResponse, Uri } import akka.stream.scaladsl.{ Flow, Sink, Source } import org.slf4j.LoggerFactory trait WebService { val log = LoggerFactory.getLogger("total") private var binding: scala.concurrent.Future[ServerBinding] = null def serviceBind(serviceName: String, bindRoute: Flow[HttpRequest, HttpResponse, Any], bindPort: Int) (implicit actorSystem: ActorSystem, materializer: Materializer): Unit = { binding = Http().bindAndHandle(bindRoute,"0.0.0.0", bindPort) // the rest of the sample code will go here binding.onComplete { //binding success check case Success(binding) => val localAddress = binding.localAddress log.info(s"${serviceName} is listening on ${localAddress.getAddress}:${localAddress.getPort}") case Failure(e) => log.error(s"${serviceName} Binding failed with ${e.getMessage}") } } def serviceUnbind(serviceName: String) = { if( binding != null ) { binding .flatMap(_.unbind()) .onComplete(_ => log.info(s"${serviceName} listening port unbinding ... ") ) } else log.info( s"${serviceName} Unbinding Failed !" ) } }
Example 12
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 13
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 14
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 15
Source File: Startup.scala From 006877 with MIT License | 5 votes |
package com.goticks import scala.concurrent.Future import scala.util.{Failure, Success} import akka.actor.ActorSystem import akka.event.Logging import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Route import akka.stream.ActorMaterializer trait Startup extends RequestTimeout { def startup(api: Route)(implicit system: ActorSystem) = { val host = system.settings.config.getString("http.host") // 설정에서 호스트와 포트를 가져온다 val port = system.settings.config.getInt("http.port") startHttpServer(api, host, port) } def startHttpServer(api: Route, host: String, port: Int) (implicit system: ActorSystem) = { implicit val ec = system.dispatcher // bindAndHandle에는 암시적인 ExecutionContext가 필요하다 implicit val materializer = ActorMaterializer() val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) // HTTP 서버를 시작한다 val log = Logging(system.eventStream, "go-ticks") bindingFuture.map { serverBinding => log.info(s"RestApi bound to ${serverBinding.localAddress} ") }.onComplete { case Success(v) => case Failure(ex) => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } } }
Example 16
Source File: Main.scala From 006877 with MIT License | 5 votes |
package com.goticks import scala.concurrent.Future import scala.util.{Failure, Success} import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.util.Timeout import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import com.typesafe.config.{ Config, ConfigFactory } object Main extends App with RequestTimeout { val config = ConfigFactory.load() val host = config.getString("http.host") // 설정으로부터 호스트와 포트를 가져온다 val port = config.getInt("http.port") implicit val system = ActorSystem() implicit val ec = system.dispatcher // bindAndHandle은 비동기적이며, ExecutionContext를 암시적으로 사용해야 한다 val api = new RestApi(system, requestTimeout(config)).routes // RestApi는 HTTP 루트를 제공한다 implicit val materializer = ActorMaterializer() val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) // RestApi 루트를 가지고 HTTP 서버를 시작한다 val log = Logging(system.eventStream, "go-ticks") bindingFuture.map { serverBinding => log.info(s"RestApi bound to ${serverBinding.localAddress} ") }.onComplete { case Success(v) => case Failure(ex) => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } } trait RequestTimeout { import scala.concurrent.duration._ def requestTimeout(config: Config): Timeout = { val t = config.getString("akka.http.server.request-timeout") val d = Duration(t) FiniteDuration(d.length, d.unit) } }
Example 17
Source File: ShoppersServiceSupport.scala From 006877 with MIT License | 5 votes |
package aia.persistence.rest import com.typesafe.config.Config import scala.concurrent.Future import akka.actor._ import akka.event.Logging import akka.util.Timeout import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.stream.ActorMaterializer import aia.persistence._ trait ShoppersServiceSupport extends RequestTimeout { def startService(shoppers: ActorRef)(implicit system: ActorSystem) = { val config = system.settings.config val settings = Settings(system) val host = settings.http.host val port = settings.http.port implicit val ec = system.dispatcher //bindAndHandle requires an implicit ExecutionContext val api = new ShoppersService(shoppers, system, requestTimeout(config)).routes // the RestApi provides a Route implicit val materializer = ActorMaterializer() val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "shoppers") bindingFuture.map { serverBinding => log.info(s"Shoppers API bound to ${serverBinding.localAddress} ") }.failed.foreach { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } } } trait RequestTimeout { import scala.concurrent.duration._ def requestTimeout(config: Config): Timeout = { val t = config.getString("akka.http.server.request-timeout") val d = Duration(t) FiniteDuration(d.length, d.unit) } }
Example 18
Source File: OrderServiceApp.scala From 006877 with MIT License | 5 votes |
package aia.integration import scala.concurrent.Future import akka.actor.{ ActorSystem , Actor, Props } import akka.event.Logging import akka.util.Timeout import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import com.typesafe.config.{ Config, ConfigFactory } object OrderServiceApp extends App with RequestTimeout { val config = ConfigFactory.load() val host = config.getString("http.host") val port = config.getInt("http.port") implicit val system = ActorSystem() implicit val ec = system.dispatcher val processOrders = system.actorOf( Props(new ProcessOrders), "process-orders" ) val api = new OrderServiceApi(system, requestTimeout(config), processOrders).routes implicit val materializer = ActorMaterializer() val bindingFuture: Future[ServerBinding] = Http().bindAndHandle(api, host, port) val log = Logging(system.eventStream, "order-service") bindingFuture.map { serverBinding => log.info(s"Bound to ${serverBinding.localAddress} ") }.failed.foreach { case ex: Exception => log.error(ex, "Failed to bind to {}:{}!", host, port) system.terminate() } } trait RequestTimeout { import scala.concurrent.duration._ def requestTimeout(config: Config): Timeout = { val t = config.getString("akka.http.server.request-timeout") val d = Duration(t) FiniteDuration(d.length, d.unit) } }
Example 19
Source File: MockOAuth2Server.scala From incubator-retired-gearpump with Apache License 2.0 | 5 votes |
package org.apache.gearpump.services.security.oauth2 import scala.concurrent.{Await, Future} import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.stream.ActorMaterializer import akka.stream.scaladsl.Sink import org.apache.gearpump.util.Util // NOTE: This cannot be removed!! import org.apache.gearpump.services.util.UpickleUtil._ class MockOAuth2Server( actorSystem: ActorSystem, var requestHandler: HttpRequest => HttpResponse) { implicit val system: ActorSystem = actorSystem implicit val materializer = ActorMaterializer() implicit val ec = system.dispatcher private var _port: Int = 0 private var bindingFuture: Future[ServerBinding] = null def port: Int = _port def start(): Unit = { _port = Util.findFreePort().get val serverSource = Http().bind(interface = "127.0.0.1", port = _port) bindingFuture = { serverSource.to(Sink.foreach { connection => connection handleWithSyncHandler requestHandler }).run() } } def stop(): Unit = { import scala.concurrent.duration._ Await.result(bindingFuture.map(_.unbind()), 120.seconds) } }
Example 20
Source File: AkkaHttpMockWebServer.scala From wix-http-testkit with MIT License | 5 votes |
package com.wix.e2e.http.server.internals import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model.headers.{ProductVersion, Server} import akka.http.scaladsl.model.{HttpRequest, HttpResponse} import akka.http.scaladsl.settings.ServerSettings import com.wix.e2e.http.api.BaseWebServer import com.wix.e2e.http.info.HttpTestkitVersion import com.wix.e2e.http.utils._ import com.wix.e2e.http.{BaseUri, RequestHandler, WixHttpTestkitResources} import scala.concurrent.Future import scala.concurrent.duration._ abstract class AkkaHttpMockWebServer(specificPort: Option[Int], val initialHandlers: Seq[RequestHandler]) extends BaseWebServer with AdjustableServerBehaviorSupport { import WixHttpTestkitResources.{executionContext, materializer, system} protected def serverBehavior: RequestHandler def start() = this.synchronized { val s = waitFor( Http().bindAndHandleAsync(handler = TransformToStrictAndHandle, interface = "localhost", settings = customSettings, port = specificPort.getOrElse( AllocateDynamicPort )) ) serverBinding = Option(s) println(s"Web server started on port: ${baseUri.port}.") this } def stop() = this.synchronized { serverBinding.foreach{ s => waitFor( s.unbind() ) } serverBinding = None this } def baseUri = specificPort.map( p => BaseUri("localhost", port = p) ) .orElse( serverBinding.map( s => BaseUri(port = s.localAddress.getPort) )) .getOrElse( throw new IllegalStateException("Server port and baseUri will have value after server is started") ) private var serverBinding: Option[ServerBinding] = None private val AllocateDynamicPort = 0 private val TransformToStrictAndHandle: HttpRequest => Future[HttpResponse] = _.toStrict(1.minutes).map( serverBehavior ) private def customSettings = ServerSettings(system).withTransparentHeadRequests(false) .withServerHeader( Some(Server(ProductVersion("server-http-testkit", HttpTestkitVersion))) ) }
Example 21
Source File: package.scala From drunk with Apache License 2.0 | 5 votes |
package com.github.jarlakxen import java.net.InetSocketAddress import java.nio.channels.ServerSocketChannel import scala.concurrent._ import scala.concurrent.duration._ import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.http.scaladsl.model._ import akka.http.scaladsl.server.Route import akka.stream.ActorMaterializer import akka.testkit._ import org.scalatest.BeforeAndAfterAll package object drunk { trait TestHttpServer extends BeforeAndAfterAll { this: Spec => implicit val system: ActorSystem = ActorSystem("drunk-test") implicit def executor = system.dispatcher implicit val materializer = ActorMaterializer() private def temporaryServerAddress(interface: String = "127.0.0.1"): InetSocketAddress = { val serverSocket = ServerSocketChannel.open() try { serverSocket.socket.bind(new InetSocketAddress(interface, 0)) val port = serverSocket.socket.getLocalPort new InetSocketAddress(interface, port) } finally serverSocket.close() } private def temporaryServerHostnameAndPort(interface: String = "127.0.0.1"): (String, Int) = { val socketAddress = temporaryServerAddress(interface) (socketAddress.getHostName, socketAddress.getPort) } val (host, port) = temporaryServerHostnameAndPort() override protected def beforeAll(): Unit = Http().bindAndHandle(serverRoutes, host, port).futureValue override protected def afterAll(): Unit = TestKit.shutdownActorSystem(system) def serverRoutes: Route } }
Example 22
Source File: VisualMailboxMetricServer.scala From akka-visualmailbox with Apache License 2.0 | 5 votes |
package de.aktey.akka.visualmailbox import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import akka.io.Udp.{Bind, Bound, CommandFailed} import akka.io.{IO, Udp} import akka.pattern._ import akka.stream.ActorMaterializer import akka.util.Timeout import com.typesafe.config.ConfigFactory import de.aktey.akka.visualmailbox.data.DataSourceEndpoint import de.aktey.akka.visualmailbox.web.{Routing, WebConfig} import scala.concurrent.duration._ object VisualMailboxMetricServer extends App { val allConfig = ConfigFactory.load() val config = VisualMailboxMetricClientConfig.fromConfig(allConfig) implicit val system = ActorSystem("visualmailbox-visualizer") implicit val meterializer = ActorMaterializer() implicit val bindTimeout = Timeout(2.seconds) import system._ val router = system.actorOf(MetricsRouter.props(), "router") val dataHandler = system.actorOf(DataSourceEndpoint.props(router), "data-sink") (IO(Udp) ? Bind(dataHandler, config.serverAddress)).map { case CommandFailed(cmd) => system.terminate() case Bound(address) => log.info(s"""{"type":"udp-bound","address":"$address"}""") } val webConfig = WebConfig.fromConfig(allConfig) Http() .bindAndHandle(Routing.root(MetricFlow.metricSource(router)), webConfig.host, webConfig.port) .foreach { case ServerBinding(address) => log.info(s"""{"type":"http-bound","address":"$address"}""") } }
Example 23
Source File: Main.scala From reactive-kafka-microservice-template with Apache License 2.0 | 5 votes |
package com.omearac import akka.actor.{ActorSystem, Props} import akka.event.Logging import akka.http.scaladsl.Http import akka.http.scaladsl.Http.ServerBinding import com.omearac.consumers.ConsumerStreamManager.InitializeConsumerStream import com.omearac.consumers.{ConsumerStreamManager, DataConsumer, EventConsumer} import com.omearac.http.HttpService import com.omearac.producers.ProducerStreamManager.InitializeProducerStream import com.omearac.producers.{DataProducer, EventProducer, ProducerStreamManager} import com.omearac.settings.Settings import com.omearac.shared.AkkaStreams import com.omearac.shared.KafkaMessages.{ExampleAppEvent, KafkaMessage} import scala.concurrent.{Await, Future} import scala.concurrent.duration._ import scala.io.StdIn object Main extends App with HttpService with AkkaStreams { implicit val system = ActorSystem("akka-reactive-kafka-app") val log = Logging(system, this.getClass.getName) //Start the akka-http server and listen for http requests val akkaHttpServer = startAkkaHTTPServer() //Create the Producer Stream Manager and Consumer Stream Manager val producerStreamManager = system.actorOf(Props(new ProducerStreamManager), "producerStreamManager") val consumerStreamManager = system.actorOf(Props(new ConsumerStreamManager), "consumerStreamManager") //Create actor to publish event messages to kafka stream. val eventProducer = system.actorOf(EventProducer.props, "eventProducer") producerStreamManager ! InitializeProducerStream(eventProducer, ExampleAppEvent) //Create actor to consume event messages from kafka stream. val eventConsumer = system.actorOf(EventConsumer.props, "eventConsumer") consumerStreamManager ! InitializeConsumerStream(eventConsumer, ExampleAppEvent) //Create actor to publish data messages to kafka stream. val dataProducer = system.actorOf(DataProducer.props, "dataProducer") producerStreamManager ! InitializeProducerStream(dataProducer, KafkaMessage) //Create actor to consume data messages from kafka stream. val dataConsumer = system.actorOf(DataConsumer.props, "dataConsumer") consumerStreamManager ! InitializeConsumerStream(dataConsumer, KafkaMessage) //Shutdown shutdownApplication() private def startAkkaHTTPServer(): Future[ServerBinding] = { val settings = Settings(system).Http val host = settings.host println(s"Specify the TCP port do you want to host the HTTP server at (e.g. 8001, 8080..etc)? \nHit Return when finished:") val portNum = StdIn.readInt() println(s"Waiting for http requests at http://$host:$portNum/") Http().bindAndHandle(routes, host, portNum) } private def shutdownApplication(): Unit = { scala.sys.addShutdownHook({ println("Terminating the Application...") akkaHttpServer.flatMap(_.unbind()) system.terminate() Await.result(system.whenTerminated, 30 seconds) println("Application Terminated") }) } }