在闭包中使用 ignite 安全吗?
Is it safe to use ignite within a closure?
我正在使用 ignite 服务,它将通过 run
发布一些任务。服务看起来像这样:
public interface MySvc{
public void foSomeJob();
}
public MySvcImpl implements MySvc, Service{
@IgniteInstanceResource
private Ignite ignite;
public void foSomeJob(){
IgniteCompute compute = ignite.compute();
compute.run(() -> {
ignite.binary() //<----Is it safe?
.builder("TYPE"); // What is gonna happen on another node
//build binary object and put it into a cache
}
}
}
问题是在另一个节点上会发生什么?我们序列化 Ignite
实例(真的??)并通过网络发送它。或者它是如何工作的?
在我的例子中,任务的性能是至关重要的...所以我想了解在 运行 另一个节点上的任务的情况下它是如何工作的?
也许我应该明确地使用 Ignition.ignite();
?
在你的例子中,如果你使用 lambda,它会序列化这个 ignite 对象。
您可以创建 class 以将其用作 compute() 中的参数并在此 class.
中使用 @IgniteInstanceResource 注释来代替它
@IgniteInstanceResource 注释注入一个当前的点燃实例。在这个闭包 运行 的那一刻,你将有一个 ignite 实例,它执行这个闭包。
Ignite
实例确实是 "serialized",在远程节点上,您实际上将获得该节点本地的实例。 Ignite
当然不会通过网络物理发送。
话虽如此,这段代码是正确的并且可以工作。但是,对通过网络发送的闭包使用 lambda 或匿名 classes 并不是一个很好的做法。我建议创建一个单独的 class 并使用 @IgniteInstanceResource
或 Ignition.ignite()
注入 Ignite。这样您就可以更好地控制序列化和通过网络发送的内容。从性能的角度来看,它更安全、更好。
我正在使用 ignite 服务,它将通过 run
发布一些任务。服务看起来像这样:
public interface MySvc{
public void foSomeJob();
}
public MySvcImpl implements MySvc, Service{
@IgniteInstanceResource
private Ignite ignite;
public void foSomeJob(){
IgniteCompute compute = ignite.compute();
compute.run(() -> {
ignite.binary() //<----Is it safe?
.builder("TYPE"); // What is gonna happen on another node
//build binary object and put it into a cache
}
}
}
问题是在另一个节点上会发生什么?我们序列化 Ignite
实例(真的??)并通过网络发送它。或者它是如何工作的?
在我的例子中,任务的性能是至关重要的...所以我想了解在 运行 另一个节点上的任务的情况下它是如何工作的?
也许我应该明确地使用 Ignition.ignite();
?
在你的例子中,如果你使用 lambda,它会序列化这个 ignite 对象。
您可以创建 class 以将其用作 compute() 中的参数并在此 class.
中使用 @IgniteInstanceResource 注释来代替它@IgniteInstanceResource 注释注入一个当前的点燃实例。在这个闭包 运行 的那一刻,你将有一个 ignite 实例,它执行这个闭包。
Ignite
实例确实是 "serialized",在远程节点上,您实际上将获得该节点本地的实例。 Ignite
当然不会通过网络物理发送。
话虽如此,这段代码是正确的并且可以工作。但是,对通过网络发送的闭包使用 lambda 或匿名 classes 并不是一个很好的做法。我建议创建一个单独的 class 并使用 @IgniteInstanceResource
或 Ignition.ignite()
注入 Ignite。这样您就可以更好地控制序列化和通过网络发送的内容。从性能的角度来看,它更安全、更好。