Akka的活动巴士是否可以保证消息顺序?
我想保留事件进入公共汽车的顺序。 例如,如果事件1然后是进入公共汽车的事件2,则订阅的演员将按照该顺序获取它们。
问题在于,如果这样的顺序是保证的,无论是在集群系统上还是在单节点角色系统上。
如果您在actor系统( system.eventStream
)上使用事件流,并且您可以保证发布单个线程,那么是的,订单将被保留。 事件总线的子通道分类风格(与system.eventStream
相关的类型)非常简单。 有一个基本上是类类型的Map
到订阅actor的列表。 当一个事件发布时,它从Map
获得匹配的订户列表(如果有的话),然后将消息发送给它们中的每一个。 因此,如果只有一个线程调用publish
,那么在移动到event2之前,它需要完成发布event1(并将其发送到所有订户的邮箱)。 参与者按收到邮件的顺序处理邮箱(除非您使用自定义的PriorityMailbox
impl),所以先进先出。
当然,如果你有多个线程,我不能保证顺序处理,因为thread1可能会首先启动发布,但是线程2可能会先完成它,导致你会认为不按顺序。
链接地址: http://www.djcxy.com/p/23065.html