2014-10-07 90 views
7

我想保留事件进入公交车的顺序。 例如,如果事件1然后事件2进入公共汽车然后订阅的演员将按顺序获得他们。Akka的事件总线保证消息顺序?

的问题是,如果这样的顺序是保证,无论在集群和单个节点的演员系统。

+0

我假设你是从一个单独的线程添加它们,否则你可以保证的是,所有的听众看到相同的顺序。 – 2014-10-07 10:52:47

+0

@dds这部分是指演员沟通,但我想知道事件总线。 – 2014-10-07 11:16:04

+1

@PeterLawrey是的,单个主题发布者 – 2014-10-07 11:16:59

回答

3

如果您在参与者系统(system.eventStream)上使用事件流,并且您可以保证单个线程正在发布,则是,订单将被保留。事件总线(与system.eventStream有关的那种)的子信道分类风格非常简单。基本上类型的Map到订阅演员列表。当一个事件发布时,它从Map(如果有的话)获得匹配的订户列表,然后将消息发送给它们中的每一个。因此,如果只有一个线程在呼唤publish,那么就需要在完成发布事件1(并因此提供给所有用户的邮箱)在继续之前事件2。参与者按收到邮件的顺序处理邮箱(除非您使用的是自定义的PriorityMailbox impl),所以先进先出。

现在当然,如果你有多个线程,我不能为了处理保证这是线程1可以开始先发布,但是线程2可能完成它首先在通向你会考虑出点什么。