我想保持事件进入公共汽车的顺序。例如,如果 event1 然后 event2 进入总线,那么订阅的参与者将按该顺序获取它们。
问题是这样的顺序是否可以保证,无论是在集群还是在单节点参与者系统上。
system.eventStream
如果你在actor系统上使用事件流(事件总线(与 绑定的那种system.eventStream
)的子通道分类风格非常简单。Map
订阅演员列表有一个基本的类类型。发布事件时,它会从(如果有)获取匹配的订阅者列表,Map
然后将消息发送给每个订阅者。因此,如果只有一个线程在调用publish
,那么它需要完成 event1 的发布(从而将其传递到所有订阅者的邮箱),然后才能继续进行 event2。Actors 按照接收消息的顺序处理他们的邮箱(除非您使用自定义PriorityMailbox
impl),所以先进先出。
现在当然,如果您有多个线程,我不能保证按顺序处理,因为线程 1 可能首先开始发布,但线程 2 可能首先完成它,导致您认为无序。