Ich habe einen Akka Actor, an den ich "control" Nachrichten senden möchte. Die Hauptaufgabe dieses Actors besteht darin, eine Kafka-Warteschlange anzuhören, bei der es sich um einen Abrufprozess in einer Schleife handelt.Kann ich sicher einen Thread in einem Akka Actor erstellen?
Ich habe festgestellt, dass die folgenden einfach den Schauspieler sperrt und es wird nicht erhalten die „Stop“ (oder irgendeine andere) Nachricht: Gestartet von
class Worker() extends Actor {
private var done = false
def receive = {
case "stop" =>
done = true
kafkaConsumer.close()
// other messages here
}
// Start digesting messages!
while (!done) {
kafkaConsumer.poll(100).iterator.map { cr: ConsumerRecord[Array[Byte], String] =>
// process the record
), null)
}
}
}
ich die Schleife in einem Thread wickeln könnte der Actor, aber ist es ok/sicher, einen Thread aus einem Actor heraus zu starten? Gibt es einen besseren Weg?
Absolut nicht! Sie möchten wahrscheinlich etwas wie "Verbraucherschauspieler" erstellen. Werfen Sie einen Blick auf [Reactive Kafka] (https://github.com/akka/reactive-kafka) –