gpt4 book ai didi

java - 事件 "EVT_CACHE_STARTED"触发后,Apache Ignite 无法从监听器访问缓存

转载 作者:太空宇宙 更新时间:2023-11-04 10:03:20 26 4
gpt4 key购买 nike

我希望能够监视 Apache Ignite 中的缓存创建事件。

每当发生此类事件时 - 我希望能够在创建这些缓存之后、但在其他人插入某些内容之前对它们执行某些操作。

所以我使用了本地监听器。以下是全部代码:

import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.events.CacheEvent;
import org.apache.ignite.events.EventType;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.resources.IgniteInstanceResource;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class ServerConfig {

public ServerConfig(Environment e) throws Exception {
IgniteConfiguration cfg = new IgniteConfiguration();
cfg.setIncludeEventTypes(EventType.EVT_CACHE_STARTED);
Ignite ignite = Ignition.start(cfg);
String cacheName = "test";

registerCacheCreationListener(ignite);
IgniteCache<Integer, String> cache = ignite.getOrCreateCache(cacheName);
}

private void registerCacheCreationListener(Ignite ignite){
IgnitePredicate<CacheEvent> locLsnr = new IgnitePredicate<CacheEvent>(){
@IgniteInstanceResource
private Ignite ignite;
@Override
public boolean apply(CacheEvent evt) {
System.out.println("Received event [evt=" + evt.name() + " cacheName=" + evt.cacheName());
IgniteCache<Integer, String > cache = ignite.cache(evt.cacheName()); // CANNOT ACCESS evt.cacheName() - STUCKS HERE
System.out.println("finish listener");
return true;
}
};
ignite.events().localListen(locLsnr, EventType.EVT_CACHE_STARTED);
}
}

所以当我这样做时:

ignite.cache(evt.cacheName())

在 IgnitePredicate 内部 - 据我了解,它尚不可用。

请帮我看看我哪里错了。谢谢。

最佳答案

通常,您不应执行缓存操作或阻止或访问 Ignite 内部的大多数其他操作。事件应该非常快速且轻量级,这意味着它们是从 Ignite 线程和 Ignite 内部锁内部执行的。

只需在事件到达时在不同的线程中安排操作即可。

关于java - 事件 "EVT_CACHE_STARTED"触发后,Apache Ignite 无法从监听器访问缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53233030/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com