有没有办法在Hazelcast中获取对象的所有侦听器?
这是我的用例。我创建了一堆队列,并将一对多的侦听器连接到这些队列。随着时间的推移,一些侦听器将被删除,我想在没有听众的情况下删除队列。我意识到我可以在我的代码中维护一个外部结构,跟踪所有队列和相关的侦听器,但如果我能使用Hazelcast本身做到这一点会很好。理想情况下像queue.getListeners()
这样会返回一个监听器ID列表。
在Hazelcast文档中,我没有看到任何方法可以执行此类操作。有没有更好的方法来完成我想要做的事情?
答案 0 :(得分:2)
您可以使用SPI访问侦听器。这是一些示例代码,当某些事情发生时触发了侦听器(例如put)。
public void publishEvent(ItemEventType eventType, Data data) {
EventService eventService = getNodeEngine().getEventService();
Collection<EventRegistration> registrations = eventService.getRegistrations(getServiceName(), name);
Address thisAddress = getNodeEngine().getThisAddress();
for (EventRegistration registration : registrations) {
QueueEventFilter filter = (QueueEventFilter) registration.getFilter();
QueueEvent event = new QueueEvent(name, filter.isIncludeValue() ? data : null, eventType, thisAddress);
eventService.publishEvent(getServiceName(), registration, event, name.hashCode());
}
}
所以你可以做的是创建你自己的Operation并让它在拥有队列的成员(队列没有被分区)上定期执行并检查监听器计数。如果没有超出侦听器和某种宽限期,则可以销毁队列。