akka 后来告诉

ozxc1zmp  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(89)

后续tell调用发送的消息是否保证由参与者按照发送的顺序进行处理?
示例:

actor ! message1
actor ! message2

参与者是否总是按照发送message1message2的顺序看到它们?

ygya80vv

ygya80vv1#

如果message1message2按该顺序从同一线程发送,或者从同一参与者发送到同一参与者(并且该参与者使用的邮箱不会对消息重新排序:默认邮箱不这样做,但是可以实现对消息重新排序的邮箱,例如为了实现优先化),目标演员将不会在message1之前接收到message2
因此,这四个中的任何一个都是可能的:

  • 接收到message1,然后接收到message2
  • 收到message1,但从未收到message2
  • 从未收到message1,但收到message2
  • message1message2均未收到

请注意,无法保证发送到不同参与者的两条消息会以任何特定顺序被接收。也无法保证从两个不同参与者发送的消息的顺序(或者,如果在任何参与者之外(例如,在Future回调或main方法中),则为不同的线程)。

相关问题