在Hazelcast对象上获取侦听器

时间:2014-10-27 02:43:20

标签: hazelcast

有没有办法在Hazelcast中获取对象的所有侦听器?

这是我的用例。我创建了一堆队列,并将一对多的侦听器连接到这些队列。随着时间的推移,一些侦听器将被删除,我想在没有听众的情况下删除队列。我意识到我可以在我的代码中维护一个外部结构,跟踪所有队列和相关的侦听器,但如果我能使用Hazelcast本身做到这一点会很好。理想情况下像queue.getListeners()这样会返回一个监听器ID列表。

在Hazelcast文档中,我没有看到任何方法可以执行此类操作。有没有更好的方法来完成我想要做的事情?

1 个答案:

答案 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并让它在拥有队列的成员(队列没有被分区)上定期执行并检查监听器计数。如果没有超出侦听器和某种宽限期,则可以销毁队列。