Новичок здесь ..Java Akka Актеры - дроссельные сообщений и приоритета
Использование AKKA версии: Акка-actor_2.11 (2.4.8) с помощью API Java.
Я пытаюсь разработать актера для создания PDF-документов. Эти PDF-документы могут быть большими, поэтому, очевидно, я хочу уменьшить скорость, с которой актер обрабатывает запрос. Также в качестве побочного требования мне также нужен «приоритетный» почтовый ящик, с помощью которого запросы генерации PDF могут обрабатываться на основе приоритета подчиненными участниками.
В моем запуске приложения, я создать глобальный реквизит, как это:
Props.create(PdfGeneratorActor.class).withDispatcher("prio-dispatcher").withRouter(new RoundRobinPool(1))
Затем я создаю актер одного запроса в формат PDF, как это:
actorSystem.actorOf(propsObjShownAbove, actorType.getCanonicalName() + "_" + UUID.randomUUID());
Моего application.conf выглядит следующим образом:
prio-dispatcher {
mailbox-type = "com.x.y.config.PriorityMailbox"
}
My PriorityMailbox выглядит так:
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;
}
}
});
}
}
Действительно ли это правильная конфигурация для достижения того, что я хотел? Я не уверен, что я что-то упустил. Во-первых, я не вижу никаких System.out.prints в моей реализации почтового ящика. Я бы предположил, что он должен прийти туда, чтобы сравнить приоритет.
Во-вторых, я ожидал бы, что PdfGenerationActor будет выполняться последовательно (один за другим), потому что это по существу один экземпляр в системе. Но я этого не вижу. Я вижу несколько участников, обрабатывающих запросы одновременно.
Я думаю, что здесь отсутствует что-то принципиальное.