我想在使用Hazelcast在群集中相互共享的两个实例中运行java任务。这样,任务可以更快地完成,而不是在单个实例中运行。请帮忙!
答案 0 :(得分:2)
您发布的问题不是很清楚您的问题。你的大任务可能是做以下事情。
在这两种情况下,您都可以在hazelcast中使用ExecutorService的分布式实现。见以下链接:
http://docs.hazelcast.org/docs/3.5/javadoc/com/hazelcast/core/IExecutorService.html
对于案例1)因为hazelcast将数据划分为多个节点(实例),所以您可以通过调用executeOnKeyOwner()方法在密钥所有者上执行任务,如下所示。
示例代码
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
Map<Integer, String> map = hz.getMap("yourMap");
for (int key = 0; key < 100; key++)
map.put(key, "someValue");
IExecutorService executor = hz.getExecutorService("executor");
for (Integer key : map.keySet())
executor.executeOnKeyOwner(new YourBigTask(), key);
YourBigTask是您的大任务类&#34;将实现Runnable
和Serializable
接口,并在run()方法中进行必要的处理。如果您需要在run()
内使用hzinstance,请同时实施HazelcastInstanceAware
。
对于案例2),您只需致电
executor.executeOnAllMembers(new YourBigTaskClass());
将在所有已知集群成员上执行您的任务。
希望这会有所帮助。我仍然鼓励您研究IExecutorService
的其他方法,并以最佳方式使用适合您问题的方法。