Ignite拥有出色的“零部署”功能,其工作流程如下:
我写了一个示例代码:
Collection<Long> broadcastResult = compute.broadcast(new IgniteCallable<Long>() {
@Override
public Long call() throws Exception {
long result = 0;
Long total = getTotal(10);
for (int i = 0; i < total; i++) {
LOGGER.info("adding {}, result {}", i, (result = result + i));
}
return result;
}
});
...
public static Long getTotal(long total) {
LOGGER.info("Total:{}", total);
return total;
}
它工作正常,远程节点打印add xxx
日志十次。但我真的想知道如何?
My IgniteCallable Instance
的需求
getTotal(long total)
方法?My IgniteCallable Instance's Byte Code
转移到
远程节点,我只给他My IgniteCallable Instance's
Reference
而不是类文件?请帮帮我,谢谢!
答案 0 :(得分:0)
回答你的问题。
最初,您的IgniteCallable
被序列化并通过网络发送。当JVM开始执行它并到达需要getTotal
的时候,它将查找具有此方法的类定义,如果JVM在本地找不到它,它将从它预加载它起源节点也是如此。
一切都很简单。基本上我们只使用Class
之类的调用来对您实例igniteCalllable.getClass()
进行序列化并通过网络发送。如果您查看Class
对象源代码,您会看到其Serializable
。