目前使用 Hazelcast 3.0 并尝试使用不同的消息对象设置不同的主题,我希望有可以收听多个主题的类,但我不明白这是怎么可能的,因为不同的 onMessage() 方法有同样的擦除。这是我的 Hazelcast 配置类:
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.ITopic;
import com.hazelcast.core.MessageListener;
public class HazelcastHelper {
//List of Topics
public static final String TIMER = "TIMER";
public static final String POINTS = "POINTS";
public static class TimerMO {}
public static class PointsMO {}
private HazelcastInstance hz = null;
public HazelcastInstance getHazelcastInstance() {
if (hz == null) {
hz = Hazelcast.newHazelcastInstance();
...
}
return hz;
}
public ITopic<TimerMO> getTimerTopic() {
return this.getHazelcastInstance().getTopic(TIMER);
}
public void publishTimer(TimerMO message) {
this.getTimerTopic().publish(message);
}
public String addTimerListener(MessageListener<TimerMO> messageListener) {
return this.getTimerTopic().addMessageListener(messageListener);
}
public ITopic<PointsMO> getPointsTopic() {
return this.getHazelcastInstance().getTopic(POINTS);
}
public void publishPoints(PointsMO message) {
this.getPointsTopic().publish(message);
}
public String addPointsListener(MessageListener<PointsMO> messageListener) {
return this.getPointsTopic().addMessageListener(messageListener);
}
}
然后,例如,我有一个超类,它根据消息对象之一侦听主题:
import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;
public class TimerListener implements MessageListener<HazelcastHelper.TimerMO> {
@Override
public void onMessage(Message<HazelcastHelper.TimerMO> message) {
...
}
}
然后是监听第二种消息对象的子类:
import com.hazelcast.core.Message;
import com.hazelcast.core.MessageListener;
public class PointsListener extends TimerListener implements MessageListener<HazelcastHelper.PointsMO> {
@Override
public void onMessage(Message<HazelcastHelper.PointsMO> message) {
...
}
}
但是,如您所见,这是不允许的,因为在实现 MessageListener 的超类和子类之间存在擦除冲突,但对于不同类型的 MessageObject 类。请注意,我还可能希望有一个类可以监听这两种类型的消息,由于擦除冲突,它也可以工作。
我错过了什么吗?这不是使用 Hazelcast 创建主题和听众的正常场景吗?我想保持我的实现干净,而不必自省 Messages 来评估它们是什么类型——在我看来 Hazelcast 没有创建干净的设计,但也许我错过了如何设置主题、消息和听众正确。请帮助我了解如何解决此问题。