可以使用AKKA来处理事件的顺序很重要

时间:2015-05-08 05:55:37

标签: akka

我的项目要求按照接收顺序处理传入事件,并且不会发生无序事件。

这个用例是用AKKA解决的吗?

2 个答案:

答案 0 :(得分:1)

按照邮箱中收到的顺序处理或推送消息以及事件。见Discussion: Message Ordering

  

演员A1将消息M1,M2,M3发送到A2

     

演员A3将消息M4,M5,M6发送到A2

     

这意味着:

     
      
  • M1已交付,必须在M2和M3之前交付
  •   
  • 如果M2已交付,则必须在M3
  • 之前交付   
  • 如果交付M4,则必须在M5和M6之前交付
  •   
  • 如果交付M5,则必须在M6
  • 之前交付   
  • A2可以看到来自A1的消息与来自A3
  • 的消息交错   
  • 由于没有保证交付,任何消息都可能被丢弃,即未到达A2
  •   

可以使用Stash特征来允许仅在处理M1时独立于发送给演员的顺序处理消息M2。从而确保处理顺序。详细了解Stash。下面用Scala编写的示例。

class MyActor extends Actor with Stash {

    override def receive: Receive = receiveM1

    def receiveM1: Receive = {
        case M1 => 
            // do some staff with M1
            unstashAll()
            context become receiveM2
        case _ => 
            stash() 
    }

    def receiveM2: Receive = {
        case M2 => 
            // do some staff with M2
    }
}

答案 1 :(得分:0)

如果事件中涉及的任务是独立的并且需要提高性能,那么akka(或其他异步解决方案)将解决该问题。 可以异步处理事件并按顺序聚合结果。