hier Newbie ..Java Akka Schauspieler - Nachrichten Drosselung und Priorität
Mit Akka Version: akka-actor_2.11 (2.4.8) über den Java-API.
Ich versuche, einen Akteur für die Generierung von PDF-Dokumenten zu entwickeln. Diese PDF-Dokumente können groß sein, also möchte ich offensichtlich die Rate drosseln, mit der der Akteur die Anfrage bearbeitet. Als Nebenbedingung benötige ich auch einen "priorisierbaren" Posteingang, mit dem die PDF-Generierungsanfragen nach Priorität von den zugrunde liegenden Akteuren bearbeitet werden können.
In meinem Start der Anwendung, erstelle ich eine globale Requisiten wie folgt aus:
Props.create(PdfGeneratorActor.class).withDispatcher("prio-dispatcher").withRouter(new RoundRobinPool(1))
Dann erstelle ich Schauspieler pro pdf Anfrage wie folgt aus:
actorSystem.actorOf(propsObjShownAbove, actorType.getCanonicalName() + "_" + UUID.randomUUID());
Meine application.conf wie folgt aussieht:
prio-dispatcher {
mailbox-type = "com.x.y.config.PriorityMailbox"
}
Mein PriorityMailbox sieht wie folgt aus:
public class PriorityMailbox extends UnboundedPriorityMailbox {
// needed for reflective instantiation
public PriorityMailbox(final ActorSystem.Settings settings, final Config config) {
super(new PriorityGenerator() {
@Override
public int gen(final Object message) {
System.out.println("Here is my message to be prioritized: "+message);
if (message instanceof Prioritizable) {
Prioritizable prioritizable = (Prioritizable) message;
if (prioritizable.getReportPriorityType() == ReportPriorityType.HIGH) {
return 0;
} else if (prioritizable.getReportPriorityType() == ReportPriorityType.LOW) {
return 2;
} else if (message.equals(PoisonPill.getInstance())) {
return 3; // PoisonPill when no other left
} else {
return 1;
}
} else {
// Default priority for any other messages.
return 1;
}
}
});
}
}
Ist dies die richtige Konfiguration, um das zu erreichen, was ich wollte? Ich bin mir nicht sicher, ob ich etwas verpasse. Erstens kann ich keine System.out.prints in meiner Mailbox-Implementierung sehen. Ich könnte mir vorstellen, dass es dorthin kommen sollte, um die Priorität zu vergleichen.
Zweitens würde ich erwarten, dass der PdfGenerationActor sequenziell ausgeführt wird (eins nach dem anderen), weil es im Wesentlichen eine einzige Instanz über das System ist. Aber ich sehe das nicht. Ich sehe mehrere Akteure, die die Anfragen gleichzeitig bearbeiten.
Ich denke, ich vermisse etwas Grundlegendes hier.