Java Akka - 如何为 PriorityMailbox 编写比较器<Envelope>?
Java Akka - How to write a Comparator<Envelope> for a PriorityMailbox?
我正在尝试按照 in the docs 所述创建一个 UnboundedPriorityMailbox
。要扩展 UnboundedPriorityMailbox
我的 IDE (IntelliJ) 强制我 @override
方法 public Comparator<Envelope> cmp()
,这在文档中没有描述。此外,我在其他地方找不到任何示例如何实现此方法。我知道 Comparator
是如何工作的,但我不知道如何将它与类型 Envelope
一起使用:-/
代码如下:
public class MyPrioMailbox extends UnboundedPriorityMailbox {
// needed for reflective instantiation
public MyPrioMailbox(ActorSystem.Settings settings, Config config) {
// Create a new PriorityGenerator, lower prio means more important
super(new PriorityGenerator() {
@Override
public int gen(Object message) {
if (message.equals(PoisonPill.getInstance()))
return 1; // 'highpriority messages should be treated first if possible
else
return 0; // By default they go between high and low prio
}
});
}
@Override
public Comparator<Envelope> cmp() {
return new Comparator<Envelope>() {
@Override
public int compare(Envelope t1, Envelope t2) {
return 0; // <-- HOW TO COMPARE t1 and t2 ?
}
};
}
@Override
public int initialCapacity() {
return 10;
}
}
优先邮箱的要点是能够为不同的消息类型分配不同的优先级。 Envelope
在 return 上有一个 message()
方法,一个 Object
表示要传递给您的演员的消息(通过 onReceive
)。从每个信封中获取 message()
并检查它们是什么类型,然后根据它分配比较器的结果。如果您使用的是优先级邮箱,那么您必须拥有希望以 higher/lower 优先级处理的邮件,因此请查看 message()
是否是 Envelope
之一的那种类型,并且return 根据 Comparator
规则的整数
我正在尝试按照 in the docs 所述创建一个 UnboundedPriorityMailbox
。要扩展 UnboundedPriorityMailbox
我的 IDE (IntelliJ) 强制我 @override
方法 public Comparator<Envelope> cmp()
,这在文档中没有描述。此外,我在其他地方找不到任何示例如何实现此方法。我知道 Comparator
是如何工作的,但我不知道如何将它与类型 Envelope
一起使用:-/
代码如下:
public class MyPrioMailbox extends UnboundedPriorityMailbox {
// needed for reflective instantiation
public MyPrioMailbox(ActorSystem.Settings settings, Config config) {
// Create a new PriorityGenerator, lower prio means more important
super(new PriorityGenerator() {
@Override
public int gen(Object message) {
if (message.equals(PoisonPill.getInstance()))
return 1; // 'highpriority messages should be treated first if possible
else
return 0; // By default they go between high and low prio
}
});
}
@Override
public Comparator<Envelope> cmp() {
return new Comparator<Envelope>() {
@Override
public int compare(Envelope t1, Envelope t2) {
return 0; // <-- HOW TO COMPARE t1 and t2 ?
}
};
}
@Override
public int initialCapacity() {
return 10;
}
}
优先邮箱的要点是能够为不同的消息类型分配不同的优先级。 Envelope
在 return 上有一个 message()
方法,一个 Object
表示要传递给您的演员的消息(通过 onReceive
)。从每个信封中获取 message()
并检查它们是什么类型,然后根据它分配比较器的结果。如果您使用的是优先级邮箱,那么您必须拥有希望以 higher/lower 优先级处理的邮件,因此请查看 message()
是否是 Envelope
之一的那种类型,并且return 根据 Comparator