在Hazelcast对象上获取侦听器



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

这是我的用例。我创建了一堆队列,并将一对多侦听器附加到这些队列中。随着时间的推移,其中一些侦听器将被删除,当没有侦听器时,我想删除队列。我意识到我可以在代码中维护一个外部结构,它可以跟踪所有队列和相关的侦听器,但如果我可以使用Hazelcast本身来实现这一点,那就太好了。理想情况下,类似于queue.getListeners(),它将返回侦听器ID的列表。

在Hazelcast文档中,我看不到任何类似的方法。有没有更好的方法来完成我想要做的事情?

您可以使用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,并在拥有队列的成员(队列未分区)上定期执行它,并检查侦听器计数。如果没有侦听器并且超过了某种宽限期,则可以销毁队列。

最新更新