如何安排在 IMap 上查询的 Hazelcast 任务?
How to schedule a task on Hazelcast that queries on the IMap?
我想在 Hazelcast 上安排一个以固定时间间隔运行的任务,并使用到达休息端点后获得的一些数据更新 IMap。下面是一个示例代码:
//主要class
IScheduledExecutorService service = hazelcast.getScheduledExecutorService("default");
service.scheduleAtFixedRate(TaskUtils.named("my-task", myTask), 30, 1);
// 任务
@Singleton
public class MyTask implements Runnable, Serializable {
RestClient restClient;
IMap<String, JsonObject> map;
@Inject
MyTask() { // Inject hazelcast and restclient
map = hazelcastInstace.getMap("my-map");
this.restClient = restClient;
}
@Override
public void run() {
Collection<JSONObject> values = map.values(new MyCustomFilter());
for(JSONObject obj : values) {
// query endpoint based on id
map.submitToKey(key, response);
}
}
private static class MyCustomFilter implements Predicate<String, JSONObject> {
public boolean apply(Map.Entry<String, JSONObject> map) {
// logic to filter relevant keys
}
}
}
当我尝试在集群上执行此操作时,我得到:
java.io.NotSerializableException: com.hazelcast.map.impl.proxy.MapProxyImpl
现在我需要 IMap 仅基于 PredicateFilter 有选择地查询某些键,这需要是后台计划作业,因此卡在此处了解如何推进此操作。任何帮助表示赞赏。 TIA
尝试让你的任务也实现 HazelcastInstanceAware
当你提交你的任务时,它被序列化,发送到网格到 运行,当它被接收时反序列化,并调用 run()
方法。
如果您的任务实现 HazelcastInstanceAware
,那么在反序列化和 run()
之间,Hazelcast 将调用方法 setHazelcastInstance(HazelcastInstance instance)
以将您的代码传递给特定 Hazelcast 实例的引用 运行ning in。从那里你可以做 instance.getMap("my-map")
并将地图引用存储在 run()
方法可以使用的瞬态字段中。
我想在 Hazelcast 上安排一个以固定时间间隔运行的任务,并使用到达休息端点后获得的一些数据更新 IMap。下面是一个示例代码:
//主要class
IScheduledExecutorService service = hazelcast.getScheduledExecutorService("default");
service.scheduleAtFixedRate(TaskUtils.named("my-task", myTask), 30, 1);
// 任务
@Singleton
public class MyTask implements Runnable, Serializable {
RestClient restClient;
IMap<String, JsonObject> map;
@Inject
MyTask() { // Inject hazelcast and restclient
map = hazelcastInstace.getMap("my-map");
this.restClient = restClient;
}
@Override
public void run() {
Collection<JSONObject> values = map.values(new MyCustomFilter());
for(JSONObject obj : values) {
// query endpoint based on id
map.submitToKey(key, response);
}
}
private static class MyCustomFilter implements Predicate<String, JSONObject> {
public boolean apply(Map.Entry<String, JSONObject> map) {
// logic to filter relevant keys
}
}
}
当我尝试在集群上执行此操作时,我得到:
java.io.NotSerializableException: com.hazelcast.map.impl.proxy.MapProxyImpl
现在我需要 IMap 仅基于 PredicateFilter 有选择地查询某些键,这需要是后台计划作业,因此卡在此处了解如何推进此操作。任何帮助表示赞赏。 TIA
尝试让你的任务也实现 HazelcastInstanceAware
当你提交你的任务时,它被序列化,发送到网格到 运行,当它被接收时反序列化,并调用 run()
方法。
如果您的任务实现 HazelcastInstanceAware
,那么在反序列化和 run()
之间,Hazelcast 将调用方法 setHazelcastInstance(HazelcastInstance instance)
以将您的代码传递给特定 Hazelcast 实例的引用 运行ning in。从那里你可以做 instance.getMap("my-map")
并将地图引用存储在 run()
方法可以使用的瞬态字段中。