【问题标题】:Does Akka's event bus guarantee message order?Akka 的事件总线是否保证消息顺序?
【发布时间】:2014-10-07 10:49:38
【问题描述】:

我想保持事件进入总线的顺序。 例如,如果 event1 然后 event2 进入总线,那么订阅的 Actor 将按该顺序获取它们。

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

【问题讨论】:

  • 我假设您是从单个线程添加它们,否则您只能保证所有听众看到相同的顺序。
  • @dds 这部分是指演员通信,但我想知道事件总线。
  • @PeterLawrey 是的,单线程发布者

标签: java scala akka event-bus


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-29
    • 2020-05-14
    • 2019-11-15
    • 2021-12-25
    • 2015-09-06
    相关资源
    最近更新 更多