我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(...)
?
答案 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方法,它返回当前节点执行的所有当前正在运行的任务。您可以使用这些期货来取消任务。