【发布时间】:2015-12-08 17:21:17
【问题描述】:
我有一个问题,要求我的演员按照消息发送的顺序处理消息。在 Akka 中,actor A 和actor B 之间的消息总是保证按照发送的顺序到达。在 Service Fabric 中的 Reliable Actors 中似乎并非如此。在我的测试用例中,消息是以不确定的顺序接收的。
我可以通过在处理第一条消息之前不发送下一条消息来强制排序,但这会破坏整个观点。我真的很想发送并忘记消息,但知道它们将由接收参与者按顺序处理。
有没有人看到这样做的模式?我认为 Orleans Actors 具有相同的乱序消息可能性。也许奥尔良的解决方案也适用于此。
【问题讨论】:
-
两个演员之间的火与忘是什么样的?两者都是单线程的吧?所以我认为订购是自然发生的?
-
是的,两者都是单线程的,但消息是通过 Service Fabric 基础结构路由的。如果参与者 A 向参与者 B 发送三个消息(M1、M2、M3),则参与者 B 可能会以不同的顺序处理它们,例如 M2、M3、M1,
-
但是演员 A 怎么能在不等待任何一个的情况下发送 M1、M2 和 M3 呢?在那种情况下,你正在用线程做一些特别的事情,对吧?否则我会假设因为应该在 A 发送 M2 之前处理 M1,这没关系。
-
消息的发送是异步的。所以我可以发送一条消息,然后发送另一条消息,而无需等待第一个消息的结果。每个参与者都是单线程的,但也有处理消息的 Service Fabric 中介。因此,对于两个参与者,至少涉及三个线程。
-
根据我的理解,当你在ActorProxy上调用一个方法时,当该方法完成时,调用由ActorProxy执行。虽然它是异步的(可等待的),但它不是异步的。你有指向解释你所说的文档的指针吗?
标签: azure-service-fabric orleans