我正在调查一个用例,其中ignite必须监听数据网格中对象属性的更改并对该对象执行某些操作。为了提高性能,我希望在数据所在的同一节点上完成处理。
当对象的属性更改为特定值时,如何获取事件(例如,对象'X
'具有属性'state
',该属性设置为'来自“scheduled
”的created
'并确保仅从对象所在的节点中获取事件?
如何确保当我收到事件并开始处理它时,没有其他人更改对象(只允许读取),直到处理完成(换句话说,事件会在事件发生后立即启动被接走了?
如何确保处理代码部署到所有节点(处理是无状态的),并且它只对本地数据进行操作(数据对象和代码之间没有硬链接,换句话说,如果处理代码将来会更新,对象保持不变)
我从文档中得到的内容如下:
// Local listener that listenes to local events.
IgnitePredicate<CacheEvent> locLsnr = evt -> {
// CODE
return result;
};
// Subscribe to specified cache events occuring on local node.
ignite.events().localListen(locLsnr,
EventType.EVT_CACHE_OBJECT_PUT);
在CODE
区块中;我必须检查“state
”上的evt.newValue()
更改,这不能早点完成吗? IE浏览器。作为localListen的一个参数以某种方式?
在CODE
块中,对象是否锁定,直到我返回结果?换句话说,是否在这里,我确信没有人可以更改对象,我可以安全地更改我的对象? IMO在'Predicate'定义中是一个奇怪的地方,而不是在处理程序类中。
斯文
答案 0 :(得分:2)
斯文,
您的代码看起来正确,应该按预期工作。回答你的问题: