Hazelcast,其他成员上的任务中的空值

时间:2018-10-29 06:51:22

标签: distributed-computing hazelcast

我正在使用Hazelcast IScheduledExecutorService,并从一个节点在此IScheduledExecutorService上提交任务,然后将其分发并在其他集群成员上执行。

节点1:创建任务(可调用)并提交给IScheduledExecutorService。 节点1:在批准任务时需要将来并生成处理程序urn(future.getHandler()。toUrn())并将urn字符串设置为task。

现在,当作业在非1的节点上调度时,我尝试获取urn值并将其值设置为null,尽管它是在task中设置的。

为什么从其他集群成员执行任务时urn在任务中变为空?

1 个答案:

答案 0 :(得分:3)

如果以后需要将来的实例,则使用URN再次构造ScheduledTaskHandler。请参见下面的示例:

HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance();
IScheduledExecutorService executorService = hazelcast.getScheduledExecutorService("myScheduler");

IScheduledFuture<Integer> future = executorService.schedule(
        new ScheduledClusterTask(), 10, TimeUnit.SECONDS);

String urn = future.getHandler().toUrn();
ScheduledTaskHandler handler = ScheduledTaskHandler.of(urn);
IScheduledFuture<Integer> scheduledFuture = executorService.getScheduledFuture(handler);

urn可以在任务提交后生成,并且可以保存/持久保存以便以后访问将来的实例。

如果在任务提交后将URN设置为任务实例,则在从其他集群成员执行任务时将无法获得它。因为任务在提交时已序列化并发送到集群,并且提交后的更改不会反映到已提交的任务中。