我有以下代码:
hazelcastInstance.<Void>getQueue(UserStorageService.LOGOUT_ALL_USERS_QUEUE_NAME).addItemListener(new ItemListener<Void>() {
@Override
public void itemAdded(ItemEvent<Void> item) {
//process event logic
hazelcastInstance.<Void>getQueue(UserStorageService.LOGOUT_ALL_USERS_QUEUE_NAME).remove(item.getItem());
}
@Override
public void itemRemoved(ItemEvent<Void> item) {
}
}, false);
我只是发送信号,在这里我处理这个信号。
如果我在处理后删除事件,我有点担心吗?我这样做是为了避免队列溢出,但我不确定它是否有意义。
我问这个问题,因为在日志中我看到了以下stacktrace:
java.lang.NullPointerException: Object is null
at com.hazelcast.util.Preconditions.checkNotNull(Preconditions.java:59)
at com.hazelcast.collection.impl.queue.QueueProxySupport.checkObjectNotNull(QueueProxySupport.java:166)
at com.hazelcast.collection.impl.queue.QueueProxySupport.removeInternal(QueueProxySupport.java:128)
at com.hazelcast.collection.impl.queue.QueueProxyImpl.remove(QueueProxyImpl.java:96)
答案 0 :(得分:1)
好像你将item.getItem()变为null。队列删除API中不允许使用null。你可以在删除之前放置一个控件来查看你为item.getItem()得到了什么吗?