Akka的事件总线是否保证消息顺序?

Noa*_*ish 7 java scala akka event-bus

我想保留事件进入公交车的顺序.例如,如果event1然后event2输入到总线,那么订阅的actor将按顺序获取它们.

问题是如果这种顺序是保证的,无论是在集群节点还是在单节点演员系统上.

cmb*_*ter 3

如果您在参与者系统 ( system.eventStream) 上使用事件流,并且您可以保证单个线程正在发布,那么是的,顺序将被保留。事件总线的子通道分类风格(与 相关的那种system.eventStream)非常简单。Map订阅演员列表有一个基本的类类型。发布事件时,它会从订阅者中获取匹配的订阅者列表Map(如果有),然后将消息发送给每个订阅者。因此,如果只有一个线程正在调用publish,那么它需要先完成事件 1 的发布(从而将其传递到所有订阅者的邮箱),然后再继续处理事件 2。参与者按照接收消息的顺序处理他们的邮箱(除非您使用自定义PriorityMailbox实现),所以先进先出。

当然,现在如果您有多个线程,我不能保证按顺序处理,因为线程 1 可能会先开始发布,但线程 2 可能会先完成它,从而导致您认为是无序的。