Java 阿克卡';s事件总线保证消息顺序?

Java 阿克卡';s事件总线保证消息顺序?,java,scala,akka,event-bus,Java,Scala,Akka,Event Bus,我想遵守事件进入公共汽车的顺序。 例如,如果event1和event2进入总线,则订阅的参与者将按该顺序获取它们 问题是,无论是在集群还是在单节点actor系统上,这样的顺序是否都是可以保证的。如果您在actor系统上使用事件流(system.eventStream),并且如果您可以保证单线程发布,那么是的,顺序将被保留。事件总线的子通道分类风格(与system.eventStream)非常简单。有一个基本类类型的映射到订阅参与者列表。发布事件时,它从映射中获取订阅者的匹配列表(如果有),然后将

我想遵守事件进入公共汽车的顺序。 例如,如果event1和event2进入总线,则订阅的参与者将按该顺序获取它们


问题是,无论是在集群还是在单节点actor系统上,这样的顺序是否都是可以保证的。

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


当然,如果你有多个线程,我不能保证处理顺序,因为线程1可以先开始发布,但是线程2可能首先完成它,导致你认为无序的东西。p> 我假设您是从一个线程添加它们,否则您只能保证所有侦听器都看到相同的顺序。@dds此部分指的是参与者通信,但我想知道事件总线。@PeterLawrey是的,一个单线程发布者