如何返回Ignite任务的ID以便将来停止此任务?

时间:2017-05-29 09:55:11

标签: ignite

broadcast某些实体的Apache Ignite任务,其ID存储在我的应用的数据库中。 在某些时候,我想停止这个任务(甚至可能在重新启动我的应用程序后)。

为此,我认为我需要以某种方式返回此任务的UUID(当我broadcast此任务时),将此任务UUID保存在我的应用程序的DB中的实体ID附近,以便将来停止此任务。 / p>

如果我知道这个任务UUID(taskUuid)(scala代码),我可以在这里停止这个任务:

val clusterGroup = ignite$.cluster().forServers()
ignite$.compute(clusterGroup).broadcast(new IgniteRunnable {
  override def run(): Unit = {
    ignite$.compute().activeTaskFutures[Any]().asScala.filter(
      e => e._1.toString == taskUuid).foreach(e => e._2.cancel())
  }
})

所以,我的问题是,当我使用taskUuid方法提交某项任务时,如何返回此IgniteCompute.broadcast(...)

2 个答案:

答案 0 :(得分:2)

您可以异步执行任务并从以后获取此信息(这是Java代码,但可以轻松映射到Scala):

IgniteCompute asyncCompute = ignite.compute().withAsync();

asyncCompute.broadcast(new MyRunnable());

ComputeTaskFuture<?> future = asyncCompute.future();

IgniteUuid id = future.getTaskSession().getId();

答案 1 :(得分:1)

这取决于Ignite版本。

从2.0开始:您可以使用IgniteCompute.broadcastAsync,返回IgniteFuture。

之前的2.0:有一个IgniteCompute.activeTaskFutures方法,它返回当前节点执行的所有当前正在运行的任务。您可以使用这些期货来取消任务。