में संदेशों को स्थगित करने का सही तरीका मैं दो पेस में वितरित कंप्यूटेशंस करने के लिए अक्का क्लस्टर का उपयोग कर रहा हूं। पहले phaseA
फिर phaseB
। चरणों को संभालने के लिए मैं अक्का के एफएसएम का उपयोग करता हूं।अक्का
कोई कठोर सिंक्रनाइज़ेशन नहीं है इसलिए नोड्स में से एक phaseB
तक पहुंच सकता है जबकि अन्य अभी भी phaseA
में हैं।
समस्या है, phaseB
में एक (वे phaseA
में अभी तक कर रहे हैं) क्या उन्हें phaseB-related
संदेशों ढीला करने के लिए कारण बनता है दूसरों के लिए phaseB-related
संदेश भेजता है।
के लिए अब मैं अज्ञात संदेशों को स्थगित करने का सरल चाल का उपयोग करें:
case any => self ! any
लेकिन IMO यह है कि ऐसा करने के लिए उचित तरीका नहीं है। मुझे पता है कि मैं अक्का शेड्यूलर का उपयोग करके any
शेड्यूल भी कर सकता हूं, लेकिन मुझे यह पसंद नहीं है।
package whatever
import akka.actor._
object Test extends App {
case object PhaseA
case object PhaseB
class Any extends Actor {
def phaseA: Receive = {
case PhaseA => {
context.become(phaseB)
println("in phaseB now")
}
case any => self ! any
}
def phaseB: Receive = {
case PhaseB => println("got phaseB message !")
}
def receive = phaseA
}
val system = ActorSystem("MySystem")
val any = system.actorOf(Props(new Any), name = "any")
any ! PhaseB
any ! PhaseA
}
ऐसी स्थिति में संदेशों को स्थगित करने का सही तरीका क्या है:
यहाँ कोड सरल है?
क्या चरण ए में अभिनेता को संदेश कतार में डाल दिया गया है और फिर चरण बी में प्रवेश करते समय उन्हें स्वयं भेज दें। कलाकारों के बारे में कारण जैसे कि वे लोग थे। अगर आप कागज़ के टुकड़े पर एक संदेश भेजते हैं तो आप क्या करेंगे जो आप अभी तक संभालने के लिए तैयार नहीं हैं? जब तक आप इससे निपटने के लिए तैयार न हों तब तक अपनी मेज पर ढेर पर रखो। –