Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object BackendActor {
- def EventActor1Pool = Props(classOf[EventActor1]).withDispatcher("file-dispatcher").withRouter(SmallestMailboxRouter(150))
- .
- .
- .
- def senderPool: Props = Props(classOf[SenderActor]).withDispatcher("file-dispatcher").withRouter(SmallestMailboxRouter(600))
- }
- case class Packet(uri: String, payload: String, attempts: Int = 0) extends Serializable
- trait Sender extends Logging {
- val HttpOpts = List(HttpOptions.connTimeout(1000), HttpOptions.readTimeout(5000))
- def send(packet: Packet): Unit = {
- logger info s"Sending the following packet -> $packet."
- val responseCode = Http
- .postData(packet.uri, packet.payload)
- .header("content-type", "application/json")
- .options(HttpOpts)
- .responseCode
- if (responseCode == 200)
- logger info s"Succesfully sent $packet"
- else
- logger error s"Failed with http status code $responseCode while trying to send $packet."
- }
- }
- class SenderActor extends Actor with Sender {
- val retryDelay = 60 // seconds
- val maxRetries = 3
- def receive = LoggingReceive {
- case Packet(uri, payload, attempts) ⇒
- try {
- send(Packet(uri, payload, attempts))
- } catch {
- case _: java.net.SocketTimeoutException => {
- if (attempts < maxRetries) {
- val newPacket = Packet(uri, payload, attempts + 1)
- val delay = newPacket.attempts * retryDelay
- ActorsSystem.schedule(delay, newPacket)
- logger error s"Sending operation failed. Retrying in $delay seconds."
- } else
- logger error s"Failed to register: $payload. "
- }
- case exception: Exception => {
- logger error (s"Unexpected exception throwed while trying to send: $payload", exception)
- }
- }
- case unknown ⇒ logger warn unknown.toString
- }
- }
- class Event1Actor extends Actor with ActorLogging {
- def receive = LoggingReceive {
- case Event1(strategy, payload) ⇒
- val uri = s"${Configuration.Url}/$strategy"
- ActorsSystem("sender") ! Packet(uri, payload)
- case unknown ⇒ log warning unknown.toString
- }
- }
- .
- .
- .
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement