我的项目要求按照接收顺序处理传入事件,并且不会发生无序事件。
这个用例是用AKKA解决的吗?
答案 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(或其他异步解决方案)将解决该问题。 可以异步处理事件并按顺序聚合结果。